我有两个表。
Table 1 columns are
====================
(MAINID, XID, Name)
====================
(A1 1 SAP)
(B2 2 BAPS)
(C3 3 SWAMI)
Table 2 columns are
===================
(ID COL1)
===================
(1 XYZ)
(2 ABC)
现在,我想查找哪个 XID 值不在 Table2 的 ID 列中。在表 1 中,XID 是唯一的,在表 2 中,ID 也是 PK。
select xid
from table1
where xid not in
(select id from table2)
Aln 替代解决方案是使用 LEFT JOIN。
SELECT tb1.*
FROM Table1 AS tb1 LEFT JOIN Table2 AS tb2
ON tb1.XID = tb2.ID
WHERE tb2.ID IS NULL
这是使用 Sets 差分的典型情况,但是,Rossana 提供的解决方案比这个更快(不确定 Steve Howard 解决方案):
select XID as ID from Table1
except
select ID from Table2;
SQLFiddle
这样,您就可以从表 1 中获取不在表 2 中的那些 ID。请注意,此解决方案适用于postgresql,其他RDBMS使用不同的子句作为MINUS。
下一个解决方案比使用 IN 和 EXCEPT 子句更快:
select XID from Table1 t1
where (not exists (
select ID from Table2 t2 where (t1.XID = t2.ID)
));
SQLFiddle