2016-03-29 93 views
0

我希望你可以提供幫助,我在DB2,OR和OS中有兩個車輛表,或者是將要交付的汽車的訂單,而OS是那些已經存在的汽車出售,想要諮詢OR表中的所有訂單,但不是那些在OS表中取消的訂單,我通過他們的狀態('8')來標識取消的訂單,我嘗試了這個查詢,但是我得到的訂單只是在OS表中的,並不是所有的訂單都在OS表中,我嘗試了一個OUTER JOIN,但這不是我預期的結果。DB2查詢加入

SELECT OR.OBNO, OR.ORSC, OS.SCLD 
FROM 
TABLE.OR LEFT OUTER JOIN TABLE.OS ON OR.OBNO=OS.OBNO 
WHERE OS.SLCD NOT IN ('8') 

這只是讓我的所有訂單在OS表,但不包括在手術檯的那些(對或表沒有SLCD的地位,我要排除所有那些在8個狀態的訂單OS表,但保留那些不在OS表中的)。

這一個是相同的結果。

SELECT OR.OBNO, OR.ORSC, OS.SCLD 
FROM 
TABLE.OR LEFT OUTER JOIN TABLE.OS ON OR.OBNO=OS.OBNO AND OS.SLCD NOT IN ('8') 

我希望有人能幫助我。非常感謝

+0

你的第二次嘗試是錯誤的,並不會產生相同的結果。第一個看起來對我很好,但我不能完全理解你認爲是錯誤的。因爲它是一個左連接,它將返回左表的所有行 - 這是OR,但是你寫了「OS表中的所有命令」。 – MichaelTiefenbacher

+0

是的,我認爲左外連接會返回OR表中的所有行,但在這種情況下,只返回OS表中具有SLCD狀態的訂單,我還想檢索僅在在OR表中,當我把NOT IN條件放在當我遇到問題時,它不會返回僅在OR表中的訂單。感謝您的幫助,謝謝。 –

回答

0

我覺得這是檢索這些數據的另一種方式:

SELECT OR.OBNO, OR.ORSC, OS.SCLD 
FROM TABLE.OR WHERE NOT EXISTS 
    (SELECT 1 FROM TABLE.OS WHERE OR.OBNO=OS.OBNO AND OS.SLCD = '8') 
+0

謝謝@mustaccio我嘗試了你提到的查詢,但它沒有檢索到數據,因爲你提到的方式給我一個錯誤,我嘗試了另一種方式查詢:SELECT PFOR.ORNO,PFOR.ORSC,PFOS.SLCD FROM LPMXPFIL .PFOR PFOR內部連接LPMXPFIL.PFOS PFOS打開PFOR.ORNO = PFOS.OBNO 不存在不存在 (從LPMXPFIL.PFOS選擇PFOS.SLCD PFOS PFOS.SLCD ='8') –