table1 (id, name) table2 (id, name)
询问:
SELECT name FROM table2 -- that are not in table1 already
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)。
table1
table2
name
尽管它不一定在所有情况下都是性能最高的方法,但它基本上应该在尝试实现ANSI 92 SQL的每个数据库引擎中都可以工作