我想知道在选择要执行的连接时是否可以执行条件语句。我的意思的一个例子可能是:
SELECT * FROM Table1
IF (TRUE) THEN INNER JOIN
ELSE (FALSE) THEN OUTER JOIN
END
Table2 ON (SOME CONDITION)
这显然不起作用,但我认为它更好地说明了我的问题。
答案 0 :(得分:4)
这假设您的内部和外部
都有相同的列外部联接当然包括内部联接:唯一的区别是如何处理不匹配的行,可以在WHERE子句中对其进行排序
SELECT
col1, col2
FROM
Table1
LEFT OUTER JOIN
Table2 ON ... (SOME CONDITION)
WHERE
(conditional = true AND table2.key IS NOT NULL)
OR
(conditional = false AND table2.key IS NULL)
无法保证OR的性能
答案 1 :(得分:2)
不,但您可以做的是创建两个连接,然后使用条件来选择从某个输出列中提取数据的那个...
Select Case When [Some boolean condition]
Then A.ColumnName
Else B.ColumnName End as OutputColumnName
From Table
Left Join OneTable As A
On [Join conditions]
Left Join OtherTable As B
On [Join conditions]
这可以修改为以相同的方式解决您的特定问题[内部,外部]
Select Case When [Some boolean condition]
Then A.ColumnName
Else B.ColumnName End as OutputColumnName
From Table
[Inner] Join TheTable As A
On [Join conditions]
Left [Outer] Join TheTable As B
On [Join conditions]
答案 2 :(得分:0)
根本不清楚你期望什么回来。您是期望IF逐行工作,还是整个查询工作一次?
无论如何,你可以可能通过OUTER JOIN获得你想要的东西,然后用WHERE子句过滤结果。
答案 3 :(得分:0)
没有。如果有必要,您需要动态构建查询字符串,然后执行它。或者只是总是进行外连接,并根据条件选择在前端实际使用的列。没有更多信息,很难说在任何特定情况下哪个更有意义。