首页 文章

根据条件选择连接表

提问于
浏览
0

我有3张 table

  • 表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

3 回答

  • 5

    你可以使用 UNION ALL .

    select *
    from a
    join TableB on <join condition>
    where paramB <> ''
    
    union all
    
    select *
    from a
    join TableC on <join condition>
    where paramC <> ''
    

    请注意 TableBTableC 必须具有相同的列数并且具有相同的数据类型,否则将产生错误 .

  • 1

    你可以试试这样的东西:

    select *
      from a 
      left join b ON <Joining Condition>
      left join c ON <Joining Condition>
      where paramB <> '' or paramC <> ''
    
  • 0

    步骤1:使用reqd.columns创建临时表步骤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
    

相关问题