我想知道是否有可能在选择要执行的连接时执行条件语句。举例来说,我的意思可能是这样的:SQL条件连接(内部或外部)
SELECT * FROM Table1
IF (TRUE) THEN INNER JOIN
ELSE (FALSE) THEN OUTER JOIN
END
Table2 ON (SOME CONDITION)
这显然不起作用,但我认为它更好地说明了我的问题。
我想知道是否有可能在选择要执行的连接时执行条件语句。举例来说,我的意思可能是这样的:SQL条件连接(内部或外部)
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]
谢谢。您的解决方案也适合我。这似乎是如此简单明显的回顾;-) – 2011-03-18 22:48:11