2008-11-16 99 views
1

我有一個主表,我必須從中獲取數據。我有一個左外連接,其中的字段將匹配40%的時間。然後我有另一個連接,我需要匹配表A中的數據。左外連接(三個表之間的連接)?

這是僞代碼中的SQL。此查詢不起作用。

- 這是我想要做的部分,但不起作用。 AND H.COL3 = A.STATE ?????

我正在使用IBM DB2。

SELECT DISTINCT 
    APP_NO as app_no, 
    A.STATE as state 
    ... 
    ... Fields 
    ... 
FROM 
    TABLE_A A 
LEFT OUTER JOIN 
    TABLE_B HIST 
ON 
    HIST.COL1 = A.COL1 
, TABLE_C B 
LEFT OUTER JOIN 
    TABLE_D H 
ON 
    H.COL2 = B.COL2 
-- This is the part I want to do but doesn't work. 
AND 
    H.COL3 = A.STATE???? 
WHERE 
    A.BRANCH = 'Data' 
+0

爲什麼不起作用?你得到什麼錯誤? – Mark 2008-11-16 23:22:15

+0

在DB2中,我收到以下錯誤。 如果我刪除了違規行,那麼它的工作原理。 錯誤:SQL0338N與JOIN運算符或MERGE語句關聯的ON子句無效。 SQLSTATE = 42972 (狀態:42972,本機代碼:FFFFFEAE) – 2008-11-16 23:31:00

+0

請通過此鏈接。 http://techpint.com/programming/how-sql-joins-works。我已經演示了一個包含腳本的例子。它包含完全相同的情況,你問。 – 2012-01-09 09:38:17

回答

13

我想你可以把它重新寫這樣的(但我可以讀你的說法是錯誤的)

FROM 
    TABLE_A A LEFT OUTER JOIN TABLE_B HIST ON 
     HIST.COL1 = A.COL1 
    LEFT OUTER JOIN TABLE_D H ON 
     H.COL3 = A.STATE 
    LEFT OUTER JOIN TABLE_C B ON H.COL2 = B.COL2 
WHERE 
    A.BRANCH = 'Data' 

而且,在這個錯誤狀態IBM的DOCO:關聯

ON子句JOIN運算符或MERGE語句無效。 說明:

ON子句中的列引用必須只引用處於ON子句範圍內的表的列。

所以我可能會錯,它看起來像外部聯接「H.COL3 = A.STATE」超出了On子句的範圍,因爲表A不在該範圍內的Erronous ON子句。

0

如果在WHERE子句中放置「AND H.COL3 = A.STATE」,會發生什麼?