两个表之间的SQL查询比较

3

我在我的数据库中有两个表:

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_A中不存在的用户,其在it技术方面,我是一名新手,以下是我的解决方案:
SELECT id FROM Table_B
WHERE B.id NOT IN ( SELECT A.id from Table_A)

很可能我的逻辑有误,所以如果您能给我任何指导,我将不胜感激。

这个问题可能类似。 - Tom
3个回答

1
你可以在 WHERE 子句谓词 NOT IN 中使用子查询。然后它将仅返回 table_B 中存在的 id子查询 此查询从 table_A 返回 id
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);

或者

使用符号*代替列列表选择所有列

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

如果我想提取用户和ID,我该怎么做: SELECT table_B.id AND table_B.user FROM table_B WHERE table_B.id NOT IN (SELECT table_A.id FROM table_A); - dan
@dan 在使用 MySQL 之前,建议先学习一些好的 SQL 书籍。我的建议是访问 http://www.db-book.com/。如果你没有时间阅读这本书,那么可以直接开始学习 MySQL,参考这本书 https://www.murach.com/shop/murach-s-mysql-detail,虽然有点陈旧,但易于理解和学习。 - gvgvgvijayan

0
你可以使用EXISTS函数。
Select * from table_B where Not EXISTS (select * from table_A)

但是,当您想要从表中获取一个元素时,* 不是一种缓慢的解决方案吗? - dan
Mysql 运行此查询。更多详细信息请参阅以下链接:https://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html - Mukesh Kalgude

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)

但我更倾向于第一个。


我收到了令牌不匹配的错误信息,可能是什么问题? - dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接