1

是否可以基于参数进行条件连接;例如:

//PSEUDE CODE:
DECLARE @condition bit
SET @condition=1 or 0 

SELECT * 
FROM tableA 
INNER JOIN tableB on tableA.SomeColumn = tableB.SomeColumn 
if @condition = 0 THEN 
   INNER JOIN tableC ON tableC.SomeCOlumn = TableA.SomeColumn 
ELSE
   INNER JOIN tableD ON tableD.SomeColumn=TableA.someColumn

谢谢

4

3 回答 3

2

描述

您可以构建一个包含查询的 varchar 并用于exec执行它们。

在 Transact-SQL 批处理或以下模块之一中执行命令字符串或字符串:系统存储过程、用户定义存储过程、CLR 存储过程、标量值用户定义函数或扩展存储过程。

样本

DECLARE @SQL varchar(max)
DECLARE @condition bit
SET @condition=1 

SET @SQL = 'SELECT * FROM tableA INNER JOIN tableB on tableA.SomeColumn=tableB.SomeColumn'

IF (@condition = 1) 
BEGIN 
    SET @SQL = @SQL + ' INNER JOIN tableC ON tableC.SomeCOlumn=TableA.SomeColumn'
END ELSE BEGIN
    SET @SQL = @SQL + ' INNER JOIN tableD ON tableD.SomeColumn=TableA.someColumn'
    END

exec(@SQL)

更多信息

于 2012-07-18T08:18:59.647 回答
0

你可以用动态查询来做到这一点

declare @sql_str varchar(500)
if @contidion=0
@sql_str='INNER JOIN tableC ON tableC.SomeCOlumn=TableA.SomeColumn'
else
@sql_str='INNER JOIN tableD ON tableD.SomeColumn=TableA.someColumn'

exec('SELECT * FROM tableA INNER JOIN tableB on 
 tableA.SomeColumn=tableB.SomeColumn' +@sql_str)
于 2012-07-18T08:17:35.410 回答
0

有可能,看这里

但是在这种情况下,如果您的条件是预定义的并且不是太多,我宁愿使用多个 if 语句。这更容易阅读和维护。

If (condition1)
 Select * From tblA
Else If (condition2)
 Select * From tblA Inner Join tblB ...
Else If (condition3)
 .....
于 2012-07-18T08:21:34.637 回答