sql-server - SQL Not Exists 包含空值
问题描述
我有两个 SQL Server 表:
表格1
Id name description version
----------------------------------
1 Book1 Book 1 Title v1
2 Book2 Book 2 Title v2
3 Book3 Book 3 Title NULL
4 Book5 Book 5 Title v3
表 2
Id name description version
----------------------------------
1 Book1 Book 1 Title v1
2 Book2 Book 2 Title v2
3 Book3 Book 3 Title NULL
4 Book4 Book 4 Title NULL
5 Book5 Book 5 Title NULL
我想从表 2 中选择表 1 中不存在的所有数据,以便将它们插入到另一个表中。
这是 SQL 查询:
SELECT t2.name, t2.description, t2.version
FROM Table2 AS t2
WHERE
NOT EXISTS (SELECT t1.name, t1.description, t1.version
FROM Table1 as t1
WHERE t2.name = t1.name
AND t2.description = t1.description
AND t2.version = t1.version)
预期的结果是这样的:
Id name description version
-----------------------------------
4 Book4 Book 4 Title NULL
5 Book5 Book 5 Title NULL
但我得到了这个:
Id name description version
---------------------------------
3 Book3 Book 3 Title NULL
4 Book4 Book 4 Title NULL
为什么我的语句中没有评估空值NOT EXIST
并显示?
解决方案
与任何东西比较时的 NULL 值将返回 FALSE。您将需要使用IS NULL
来处理
select t2.name, t2.description, t2.version
from Table2 as t2
WHERE NOT EXISTS
(
SELECT *
FROM Table1 as t1
WHERE t2.name = t1.name
AND t2.description = t1.description
AND (
t2.version = t1.version
OR (t2.version IS NULL AND t1.version IS NULL)
)
)
推荐阅读
- runtime-error - 检测结构或哈希表何时被修改或损坏
- r - 使用 API 密钥获取地理编码,但它说我的密钥已过期
- intellij-idea - 哪些 IDEA 文件属于版本控制?
- java - 没有重复的颜色随机代码(jawa.awt)
- ios - iOS Firebase - 获取照片网址的问题(未解析的标识符)
- c# - 如何停止处理时间过长的查询
- javascript - 当模块内的变量发生变化时,所需模块不会更新
- sql - PowerShell 要求输入值
- ios - 在 UIView 中将 Traget 添加到 UIButton。收到错误“以 NSException 类型的未捕获异常终止”
- google-cloud-platform - 在 GCP 的 VM 实例中安装 vmware。(虚拟机嵌套)