我尝试了以下查询以获取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
仅当外部联接未能在该表中找到匹配项时该列才为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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句