sql - 简单 SQL 查询中 "NOT IN"的问题

标签 sql sql-server-2005

我需要从 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/

相关文章:

.net - SQL Server 数据库可以在事务期间应答吗?

sql-server - 仅插入唯一值

mysql - jOOQ 为嵌套选择生成的 SQL 在 MySQL/MariaDB 中不起作用

sql - Informix:选择空问题

mysql - 带日期和限制的查询(DQL 中可选)

c# - 哪个是 C# 和 .NET 的 "best"数据访问框架/方法?

sql-server - 安装 sql server 2005 express 后 sqlcmd 不工作

sql - 检查列中不同值的优化方法

SQL Server 触发器 - 执行顺序

SQL Server : how to get data from lowest hierarchy in hierarchy table?