SQL条件联接(内部或外部)
我想知道在选择要执行的连接时是否可以执行条件语句。我的意思的一个例子可能是:SQL条件联接(内部或外部),sql,join,Sql,Join,我想知道在选择要执行的连接时是否可以执行条件语句。我的意思的一个例子可能是: SELECT * FROM Table1 IF (TRUE) THEN INNER JOIN ELSE (FALSE) THEN OUTER JOIN END Table2 ON (SOME CONDITION) 这显然不起作用,但我认为它更好地说明了我的问题。你希望得到什么还不清楚。您是否希望IF在逐行的基础上工作,或者在整个查询中工作一次 在任何情况下,您都可以通过外部联接获得所需的结果,然后使用WHERE子句过
SELECT * FROM Table1
IF (TRUE) THEN INNER JOIN
ELSE (FALSE) THEN OUTER JOIN
END
Table2 ON (SOME CONDITION)
这显然不起作用,但我认为它更好地说明了我的问题。你希望得到什么还不清楚。您是否希望IF在逐行的基础上工作,或者在整个查询中工作一次
在任何情况下,您都可以通过外部联接获得所需的结果,然后使用WHERE子句过滤结果。否。如果有必要,您需要动态生成查询字符串,然后执行它。或者始终执行外部联接,并根据条件选择前端中实际使用的列。在没有更多信息的情况下,很难说在任何给定的情况下哪个更有意义。这假设内部和外部都有相同的列 当然,外部联接包括内部联接:唯一的区别是如何处理不匹配的行,这些行可以在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不能保证性能,但您可以创建两个联接,然后使用条件选择从哪个联接中提取某个输出列的数据
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是巨大的(数百万条记录),如果不满足条件,我根本不想加入呢?