2010-11-23 149 views
4

我想知道是否有可能在選擇要執行的連接時執行條件語句。舉例來說,我的意思可能是這樣的:SQL條件連接(內部或外部)

SELECT * FROM Table1 
IF (TRUE) THEN INNER JOIN 
ELSE (FALSE) THEN OUTER JOIN 
END 
Table2 ON (SOME CONDITION) 

這顯然不起作用,但我認爲它更好地說明了我的問題。

回答

0

這並不是一目瞭然,你期望得到回報。你期望IF如何在逐行的基礎上工作,或者一次爲整個查詢?

無論如何,你可以可能得到你想要的與外部連接,然後用WHERE子句過濾結果。

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

+0

謝謝。您的解決方案也適合我。這似乎是如此簡單明顯的回顧;-) – 2011-03-18 22:48:11

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]