根据条件选择加入表
Posted
技术标签:
【中文标题】根据条件选择加入表【英文标题】:Select joining table based on condition 【发布时间】:2016-04-12 19:50:49 【问题描述】:我有 3 张桌子
-
表A
表B
表C
我需要根据传递的参数将 TableA 与 TableB 或 TableC 连接起来。 即
select * from
TableA A
join (TableB on <Joining Condition> / TableC on <joining condition> )
我尝试了以下查询
select * from
TableA A
join (
case when paramB<>'' then TableB on <Joining Condition>
case when paramC<>'' then TableC on <joining condition>
)
但是,这是语法错误。 有人可以帮忙吗?
解决方案:
create table #temp (<columns>)
if paramB<>''
begin
select * from
TableA A
join TableB on <Joining Condition>
end
else if paramB<>''
begin
select * from
TableA A
join TableC on <Joining Condition>
end
【问题讨论】:
你试过动态sql吗? 我不想使用动态查询。有没有其他方法..? 你需要使用动态sql查询。 你必须使用动态查询 if-else 语句怎么样?还是您希望在单个查询中进行此操作? 【参考方案1】:第 1 步:使用 reqd.columns 创建一个临时表 step-2 : 如果 paramB 有值,加入 TableB 否则加入 TableC。
create table #temp (<columns>)
if paramB<>''
begin
select * from
TableA A
join TableB on <Joining Condition>
end
else if paramB<>''
begin
select * from
TableA A
join TableC on <Joining Condition>
end
【讨论】:
您应该尝试解释代码的工作原理以及它如何回答问题,而不是简单地发布代码。【参考方案2】:您可以使用UNION ALL
。
select *
from a
join TableB on <join condition>
where paramB <> ''
union all
select *
from a
join TableC on <join condition>
where paramC <> ''
注意TableB
和TableC
的列数和数据类型必须相同,否则会报错。
【讨论】:
【参考方案3】:你可以试试这样的:
select *
from a
left join b ON <Joining Condition>
left join c ON <Joining Condition>
where paramB <> '' or paramC <> ''
【讨论】:
由于paramB
和paramC
在where
子句中使用,这实际上表现为内连接。以上是关于根据条件选择加入表的主要内容,如果未能解决你的问题,请参考以下文章