如何从一个表中选择另一张表中不存在的所有记录?

新手上路,请多包涵

表 1(ID,名称)

表2(ID,名称)

询问:

 SELECT name
FROM table2
-- that are not in table1 already

原文由 z-boss 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 322
2 个回答
SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL

:这里发生了什么?

:从概念上讲,我们从 table1 中选择所有行,并且对于每一行,我们尝试在 table2 中找到与 name 列具有相同值的行。如果没有这样的行,我们只需将该行的结果中的 table2 部分留空。然后,我们通过仅选择结果中不存在匹配行的那些行来限制我们的选择。最后,我们忽略结果中的所有字段,除了 name 列(我们确定存在的字段,来自 table1 )。

虽然它可能不是在所有情况下都可能是性能最高的方法,但它应该适用于几乎所有尝试实现 ANSI 92 SQL 的数据库引擎

原文由 Kris 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用以下查询结构:

SELECT t1.name FROM table1 t1 JOIN table2 t2 ON t2.fk_id != t1.id;

表格1 :

ID姓名1阿米特2萨加尔

表2:

ID fk_id电子邮件1 1 amit@ma.com

输出:

姓名萨加尔

原文由 w.Daya 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进