Table1 (id, name) Table2 (id, name)
查询:
SELECT name
FROM table2
-- that are not in table1 already
Table1 (id, name) Table2 (id, name)
查询:
SELECT name
FROM table2
-- that are not in table1 already
当前回答
这是纯集合论你可以用减号运算来实现。
select id, name from table1
minus
select id, name from table2
其他回答
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的数据库引擎
你可以使用以下查询结构:
SELECT t1.name FROM table1 t1 JOIN table2 t2 ON t2。Fk_id != t1.id;
表1:
id | name |
---|---|
1 | Amit |
2 | Sagar |
表二:
id | fk_id | |
---|---|---|
1 | 1 | amit@ma.com |
输出:
name |
---|
Sagar |
你可以选择
SELECT name
FROM table2
WHERE name NOT IN
(SELECT name
FROM table1)
or
SELECT name
FROM table2
WHERE NOT EXISTS
(SELECT *
FROM table1
WHERE table1.name = table2.name)
请看这个问题的3个技巧来完成这个任务
这是纯集合论你可以用减号运算来实现。
select id, name from table1
minus
select id, name from table2
我没有足够的代表点数来给froadie的答案投票。但我不同意对克里斯回答的评论。以下答案:
SELECT name
FROM table2
WHERE name NOT IN
(SELECT name
FROM table1)
在实践中效率更高。我不知道为什么,但我对800k+的记录进行了运行,上面发布的第二个答案的优势是巨大的。只有我的0.02美元。