SQL 查询两个表的比较

SQL query comparison between two tables

我的数据库中有两个表:

table_A:             table_B:                  

id    user           id    user               
1     Mike           1     Mike          
2     Dan            2     Dan           
3     Tom            3     Tom
4     Lina           4     Lina
                     5     Cynthia
                     6     Sam

我的目的是根据id识别Table_B中哪些用户不存在于Table_A中。我是 SQL 的新人,这就是我想出的:

SELECT id FROM Table_B
WHERE B.id NOT IN ( SELECT A.id from Table_A)

很可能我的逻辑是错误的,所以我很感激任何指导。

您可以使用 EXISTS 函数。

Select * from table_B where Not EXISTS (select * from table_A)

你很接近。在我看来,您唯一需要更改的是 A.ID 和 B.ID 参考

SELECT id FROM Table_B B
WHERE B.id NOT IN ( SELECT A.id from Table_A A)

由于您将 Table_A 称为 A,将 table_B 称为 B,因此您需要创建别名。

您也可以使用

SELECT id FROM Table_B B
WHERE NOT EXISTS ( SELECT A.id from Table_A A where A.ID = B.ID)

但我更喜欢第一个。

您可以在 WHERE 子句谓词中使用子查询 NOT IN 然后它会 return 只有 table_B 中的 id

子查询

此查询 return id 来自 table_A

SELECT table_A.id FROM table_A

然后它将传递给 NOT IN 子句,如果不匹配,它将在每次记录集迭代时 return 布尔值 true。所以 id 5 和 6 只有 return 在主查询中。

最终查询

SELECT table_B.id, table_B.name FROM table_B WHERE table_B.id NOT IN (SELECT table_A.id FROM table_A);

到select所有列使用符号*而不是列列表

SELECT * FROM table_B WHERE table_B.id NOT IN (SELECT table_A.id FROM table_A);