小编典典

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

sql

table1 (id, name)
table2 (id, name)

询问:

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

阅读 157

收藏
2021-05-05

共1个答案

小编典典

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的
每个数据库引擎中都可以工作

2021-05-05