繁体   English   中英

LEFT JOIN,其中包含案例条件

[英]LEFT JOIN with case condition under it

我有一个使用@Table1.ColumnName (列的名称)作为输入参数的存储过程。 这是存储过程中的查询:

select data
from Table1               
    case @Table1.ColumnName = 'Table1.column1'  
       THEN LEFT JOIN Table2  (on Table1.column1 = Table2.column1)

   case @Table1.ColumnName = 'Table1.column2' 
       THEN LEFT JOIN Table2 
             (on Table1.column2 = Table2.column1)

我需要通过检查输入参数@Table1.ColumnName在存储过程中进行左连接。 我需要在联接中更改ON条件。

我不确定语法。 任何人都可以帮助我如何编写带有条件的左连接。

您不能只做两个左联接,因为@ table1.column1变量不能同时匹配两个,您知道您只会在其中一个中得到结果。 并且您始终可以合并结果,以便从t2,t3获得非空值(下面的col1示例)

SELECT t1.*, coalesce(t1.column1, t2.column1) as Col1
FROM  Table1 t1
LEFT JOIN table2 t2 
  on T1.column1 = t2.column1 
 and @table1.column1 = 'Table1.column1'
LEFT JOIN table3 t3 
  on T1.column2 = t3.column1 
 and @table1.column2 = 'Table1.column2'

否则,我相信您必须使用动态SQL来完成您要执行的任务。

或者我想您可以将一个空白结果与一个结果相结合...

SELECT data
FROM Table1               
LEFT JOIN table2 
  (on Table1.column1 = Table2.column1)
WHERE @Table1.ColumnName = 'Table1.column1'  

UNION ALL

SELECT data
FROM Table1               
LEFT JOIN Table2 
  (on Table1.column2 = Table2.column1)
WHERE @Table1.ColumnName = 'Table1.column2' 

您可以为此使用动态sql:

declare @sql nvarchar(max);

set @sql = '
  select data
  from Table1
    left join Table2 
      on Table2.column1 = ';
if @Table1.ColumnName = 'Table1.column1'
begin;
  set @sql = @sql + 'Table1.column1';
end;
if @Table1.ColumnName = 'Table1.column2'
begin;
  set @sql = @sql + 'Table1.column2';
end;

exec sp_executesql @sql;

参考:

您可以尝试这样的事情。

SELECT data
FROM Table1               
LEFT JOIN Table2 ON
  @Table1.ColumnName = 'Table1.column1'  
  AND Table1.column1 = Table2.column1
LEFT JOIN Table2 ON
  @Table1.ColumnName = 'Table1.column2' 
  AND Table1.column2 = Table2.column1

尝试此代码,基于参数@ColName ,您将使用不同的连接条件

declare @ColName int = 'FieldNameHere'
select *
from Table1
    left join Table2
        on (Table1.column1 = Table2.column1 and @ColName = 'FieldNameHere')
            or (Table1.column2 = Table2.column2 and @ColName <> 'FieldNameHere')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM