[英]Sub query filter in LEFT/RIGHT JOIN
我嘗試了以下查詢以獲取TAB1中的丟失記錄
SELECT *
FROM TAB1 T1
RIGHT JOIN TAB2 T2 ON T1.MemNo = T2.MemID
WHERE EXISTS ( SELECT 1
FROM TAB3 x
WHERE x.Col2 = T2.SVID
AND x.Col1 = T1.SID )
AND T1.MemNo IS NULL
但這沒有任何結果
樣本數據;
TAB1
MemNo SID
116537 S110
116537 D011
575777 D012
214438 S110
434611 D114
214438 D011
208368 D012
208368 S110
TAB2
MemID SVID
116537 110
116537 11
214438 11
434675 114
214438 110
575788 12
208368 12
208368 110
TAB3
Col1 Col2
D011 11
S110 110
D114 114
D012 12
我應該如何更改查詢以獲得預期的結果。 如下所述
TAB2
MemID SVID
575788 12
434675 114
在INNER JOIN的情況下可以正常工作
謝謝
這是您寫的查詢,以便我更好地理解:
select *
from tab2 t2 left outer join
tab1 t1
on t1.MemNo = t2.MemId
where exists (SELECT 1
FROM TAB3 x
WHERE x.Col2 = T2.SVID AND x.Col1 = T1.SID ) and
T1.MemNo IS NULL
僅當外部t1.MemNo
未能在該表中找到匹配項時(因為它是t1.MemNo
條件的一部分),列t1.MemNo
為NULL。 當這是NULL
那么這樣是T1.SID
,所以exists
子句將找不到行因為一個AND
條件計算為NULL
。
如果要處理這種情況,那么還需要在exists
子句中提供邏輯:
select *
from tab2 t2 left outer join
tab1 t1
on t1.MemNo = t2.MemId
where exists (SELECT 1
FROM TAB3 x
WHERE x.Col2 = T2.SVID AND (x.Col1 = T1.SID or t1.SID is null)) and
T1.MemNo IS NULL;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.