SQL 连接,比较两列值,匹配 col 值



我有两个表。

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

最新更新