获取表中不存在但存在于另一个表中的记录

时间:2014-02-26 17:38:50

标签: mysql

我一直试图通过以下查询获取表A中存在但不存在于表B中的记录(如结果所示),但这显示了一个空表

查询:

select * FROM TableA 
where ref1 not in (select ref1 from TableB) 
and ref2 not in (select ref2 from TableB) 
and ref3 not in (select ref3 from TableB)

表A:

ref1    ref2    ref3    qte
VT1     Jaune   L       100
VT1     Jaune   XL      100
VT1     GRIS    L       100
VT1     GRIS    XL      100
VT2     Jaune   L       100
VT2     Jaune   XL      100
VT2     GRIS    L       100
VT2     GRIS    XL      100

表B:

ref1    ref2    ref3    qte
VT1     Jaune   L       100
VT1     GRIS    L       100
VT2     Jaune   L       100
VT2     GRIS    L       100
VT2     GRIS    XL      100

结果:

ref1    ref2    ref3    qte
VT1     Jaune   XL      100
VT2     Jaune   XL      100

2 个答案:

答案 0 :(得分:0)

尝试一系列LEFT JOIN,然后检查NULL

select * 
FROM TableA 
LEFT OUTER JOIN TableB b1
ON TableA.ref1 = b1.ref1
LEFT OUTER JOIN TableB b2
ON TableA.ref2 = b2.ref2
LEFT OUTER JOIN TableB 3
ON TableA.ref3 = b3.ref3
WHERE b1.ref1 IS NULL
AND b2.ref2 IS NULL
AND b3.ref3 IS NULL

虽然看看你想要的结果而不是解释,我认为这可能会做到: -

select * 
FROM TableA 
LEFT OUTER JOIN TableB b1
ON TableA.ref1 = b1.ref1
AND TableA.ref2 = b1.ref2
AND TableA.ref3 = b1.ref3
WHERE b1.ref1 IS NULL

答案 1 :(得分:0)

实际上非常简单...只需join个表并为您要排除的表设置null

select * FROM TableA a
left join TableB b 
  on a.ref1 = b.ref1 
    where b.ref1 is null