我的数据库中有两个表:
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)
我的逻辑很可能是错误的,所以我非常感谢任何指导。
答案 0 :(得分:1)
您可以在WHERE
子句谓词NOT IN
中使用子查询然后它将仅返回id
中存在的table_B
<强>子查询强>
此查询从id
table_A
SELECT table_A.id FROM table_A
然后它将被传递给NOT IN
子句,如果不匹配,它将在每个记录集迭代中返回布尔true
。因此id
5和6仅在主查询中返回。
最终查询
SELECT table_B.id, table_B.name FROM table_B WHERE table_B.id NOT IN (SELECT table_A.id FROM table_A);
OR
选择所有列使用符号*
而不是列列表
SELECT * FROM table_B WHERE table_B.id NOT IN (SELECT table_A.id FROM table_A);
答案 1 :(得分:0)
您可以使用 EXISTS 功能。
Select * from table_B where Not EXISTS (select * from table_A)
答案 2 :(得分:0)
你很亲密。在我看来,你唯一需要改变的是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)
但我更喜欢第一个。