1

我有两张桌子。

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。

4

3 回答 3

5
select xid 
from table1
where xid not in
(select id from table2)
于 2013-09-30T19:28:07.810 回答
4

替代解决方案是使用 LEFT JOIN。

SELECT tb1.*
FROM Table1 AS tb1 LEFT JOIN Table2 AS tb2
        ON tb1.XID = tb2.ID
WHERE tb2.ID IS NULL
于 2013-09-30T19:29:42.830 回答
1

这是使用 Sets 差异的典型案例,但是,Rossana 提供的解决方案比这个更快(不确定 Steve Howard 解决方案):

select XID as ID from Table1
except
select ID from Table2;

SQLFiddle

这样您就可以从 Table1 中获取不在 Table2 中的那些 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

于 2013-10-01T00:08:48.087 回答