我需要从 OldTable 中找到 NewTable 中不存在的所有 id
为什么这个查询找不到 id?
SELECT old_id FROM OldTable WHERE old_id NOT IN (
SELECT id FROM NewTable)
通过他们自己他们返回这个
--Returns the id 18571
SELECT old_id FROM OldTable WHERE old_id = 18571
--Returns nothing
SELECT id FROM NewTable WHERE id = 18571
我在这里遗漏了一些明显的东西吗?
两列的类型都是
int
和主键。已解决
id 列中有空值,我只是无知 =/
这些作品:
SELECT old_id FROM OldTable EXCEPT SELECT id FROM NewTable
SELECT * FROM old_table ot WHERE NOT EXISTS (
SELECT * FROM new_table nt WHERE nt.id = ot.old_id)
这些不起作用:
SELECT old_id FROM OldTable LEFT JOIN NewTable ON old_id = id WHERE id IS NULL
SELECT old_id FROM OldTable WHERE old_id NOT IN (
SELECT id FROM NewTable)
最佳答案
SELECT * FROM old_table ot
WHERE NOT EXISTS (
SELECT * FROM new_table nt
WHERE nt.new_key = ot.old_key
);
关于sql - 简单 SQL 查询中 "NOT IN"的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7511717/