select col1
from table1
case when @col2 is null then left outer join else join end
table2 on (join condition)
以上是我的查询,我想根据 1 个条件在左外连接或右外连接之间进行选择。
是否有更好的解决方案来实现上述问题
select col1
from table1
case when @col2 is null then left outer join else join end
table2 on (join condition)
以上是我的查询,我想根据 1 个条件在左外连接或右外连接之间进行选择。
是否有更好的解决方案来实现上述问题
我不确定这实际上是否可以按照所描述的方式进行......我会这样写;所以你根据你的附加条件短路一个 JOIN 。
select col1
from table1
left outer join table2
on (condition)
and @col2 is null
right outer join table2
on (condition)
and @col2 is not null
select col1
from table1 t1 full join table2 t2 on (join condition)
where case when @col2 is null then t2.col1 else t1.col1 end IS NOT NULL
你可以试试这段代码。
使用这个结构:
select *
from (
select
Key = 1,
-- remainder of left outer join
union all
select
Key=2,
-- remainder of right outer join
) T
where Key = case when (condition) then 1 else 2 end
select col1
from table1
left outer join
table2 on (join condition)
where @col2 is null or (@col2 is not null and table2.id is not null)
这将在left outer
或inner join
基于条件之间进行选择。