SQL查询来查找ID不在另一个表中的logging

我有两个表绑定主键在数据库中,我希望find他们之间的不相交集。 例如,

  • Table1有列( ID, Name )和样本数据: (1 ,John), (2, Peter), (3, Mary)
  • Table2具有列( ID, Address )和采样数据: (1, address2), (2, address2) ID, Address (1, address2), (2, address2) ID, Address (1, address2), (2, address2)

那么如何创build一个SQL查询,以便我可以从table1中获取不在table2 ID的行。 在这种情况下, (3, Mary)应该被退回?

PS。 ID是这两个表的主键。

提前致谢。

尝试这个

 SELECT ID, Name FROM Table1 WHERE ID NOT IN (SELECT ID FROM Table2) 

使用LEFT JOIN

 SELECT a.* FROM table1 a LEFT JOIN table2 b on a.ID = b.ID WHERE b.id IS NULL 

记住@John Woo的评论/链接上面提到的几点,这是我通常会处理的:

 SELECT t1.ID, t1.Name FROM Table1 t1 WHERE NOT EXISTS ( SELECT TOP 1 NULL FROM Table2 t2 WHERE t1.ID = t2.ID ) 

我运行了一些testing(在Postgres 9.5上),每个testing使用两个〜2M行的表。 下面的查询至less比其他提议的查询执行5 *

 -- Count select count(*) from ( (select id from table1) except (select id from table2) ) t1_not_in_t2; -- Get full row select table1.* from ( (select id from table1) except (select id from table2) ) t1_not_in_t2 join table1 on t1_not_in_t2.id=table1.id; 
 SELECT COUNT(ID) FROM tblA a WHERE a.ID NOT IN (SELECT b.ID FROM tblB b) --For count SELECT ID FROM tblA a WHERE a.ID NOT IN (SELECT b.ID FROM tblB b) --For results