我想知道是否有可能在選擇要執行的連接時執行條件語句。舉例來說,我的意思可能是這樣的: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