lor*_*ory 3 sql-server sql-server-2014
我有两个 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
Run Code Online (Sandbox Code Playgroud)
表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
Run Code Online (Sandbox Code Playgroud)
我想从表 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)
Run Code Online (Sandbox Code Playgroud)
预期的结果是这样的:
Id name description version
-----------------------------------
4 Book4 Book 4 Title NULL
5 Book5 Book 5 Title NULL
Run Code Online (Sandbox Code Playgroud)
但我得到的是这个:
Id name description version
---------------------------------
3 Book3 Book 3 Title NULL
4 Book4 Book 4 Title NULL
Run Code Online (Sandbox Code Playgroud)
为什么我的语句中没有计算空值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)
)
)
Run Code Online (Sandbox Code Playgroud)