2015-11-25 28 views
0

我有兩個表。Oracle JOIN ON colA = colB:如何包含COLA的空行

TABLE_A

| SURNAME | COL_X | 

表-B

| ID | COL_Y | 

COL_X能夠朝向表B中的ID列被映射,我需要從COL_Y的值。

下面的查詢可以正常工作,除非TABLE_A中的COL_X具有NULL值。我想包括這些行。我怎麼做?

SELECT a.SURNAME, b.COL_Y 
FROM TABLE_A a 
INNER JOIN TABLE_B b 
ON a.COL_X = b.ID 

我試過以下查詢,但它返回重複的行,因此不能使用。

SELECT a.SURNAME, b.COL_Y 
FROM TABLE_A a 
INNER JOIN TABLE_B b 
ON a.COL_X = b.ID or a.COL_X IS NULL 
+0

也許你需要使用LEFT JOIN代替內加入? – Stawros

+0

只需使用'left join'而不是'inner join'。閱讀本文http://stackoverflow.com/questions/17946221/sql-join-and-different-types-of-joins/21085546#21085546 –

回答

1

您已使用內部連接,顯示兩個表中的所有行嘗試。你也許可以使用左連接做你所期望的:

SELECT a.SURNAME, b.COL_Y 
FROM TABLE_A a 
LEFT JOIN TABLE_B b 
    ON a.COL_X = b.ID 
+0

你說得對。您的解決方案適用於我提出的問題。然而,我還應該從一開始就展示另一個變量。 ON子句應該排除TABLE_A中的其他行,如下所示:ON a.COL_Z ='Z'和(這裏是我所展示的)a.COL_X = b.ID.左連接解決了第二部分的問題,但也似乎忽略了COL_Z需要等於'Z'。你有什麼想法嗎?對困惑感到抱歉。無論如何,你解決了問題。 – user3341082

1

只需使用的LEFT JOIN而不是INNER JOIN

SELECT a.SURNAME, b.COL_Y 
FROM TABLE_A a 
LEFT JOIN TABLE_B b 
    ON a.COL_X = b.ID 
1

你應該嘗試的外連接,例如 -

SELECT a.SURNAME, b.COL_Y 
FROM TABLE_A a 
RIGHT OUTER JOIN TABLE_B b 
ON a.COL_X = b.ID or a.COL_X IS NULL 
1

那些行將具有TableB中沒有corespondent。該查詢很簡單:

SELECT a.SURNAME, b.COL_Y 
FROM TABLE_A a 
LEFT JOIN TABLE_B b 
ON a.COL_X = b.ID 

閱讀更多關於聯接:SQL JOIN and different types of JOINs

相關問題