Reputation: 420
I have query like:
select *
from BASE_TABLE
inner join (
select * from TABLE_A
) t on BASE_TABLE.ID = t.ID
and want to make nested query conditional, something like:
select *
from BASE_TABLE
inner join (
if @var = 1
select * from TABLE_A
else
select * from TABLE_B
) t on BASE_TABLE.ID = t.ID
Is it possible? Query is used inside stored procedure. Solution should work for SQL Server and Oracle or at least for SQL Server.
Upvotes: 1
Views: 1684
Reputation: 56
please try below query
declare @var int=1
declare @qry nvarchar(max)
set @qry='select * from BASE_TABLE ('
if @var=1
set @qry=@qry+ 'select * from TABLE_A'
else
set @qry=@qry+ 'select * from TABLE_B'
set @qry=@qry+')t on BASE_TABLE.ID = t.ID'
exec (@qry)
Upvotes: 0
Reputation: 338128
How about this:
SELECT
*
FROM
BASE_TABLE
INNER JOIN (
SELECT col1, col2, colN FROM TABLE_A WHERE @var IN (1) -- "if"
UNION
SELECT col1, col2, colN FROM TABLE_B WHERE @var IN (2) -- "else if"
UNION
SELECT col1, col2, colN FROM TABLE_C WHERE @var NOT IN (1, 2) -- "else"
) t ON t.ID = BASE_TABLE.ID
Upvotes: 2
Reputation: 37993
I would do it like this (but then you need to specify fields; you can't use select *
syntax):
select base.ID, base.Field1, base.Etc, Field1 = case when @var=1 then a.Field1 else b.Field1 end,
Field2 = case when @var=1 then a.Field2 else b.Field2 end
from BASE_TABLE base
left join TABLE_A a on base.ID = a.ID
left join TABLE_B b on base.ID = b.ID
Upvotes: 0