gpt4 book ai didi

SQL Server 列比较,包括 Null/Not Null

转载 作者:行者123 更新时间:2023-12-01 13:47:23 25 4
gpt4 key购买 nike

比较列对,试图找到任何不匹配的

SELECT
RecID,
Field1,
Field2
FROM
TestTable
WHERE
Field1 != Field2

但是我想在我的支票中包含空值。两列中的 Null 均有效,但是一列中的 Null 而另一列中的 Null 无效,因此需要包含在输出中

SELECT
RecID,
Field1,
Field2
FROM
TestTable
WHERE
(Field1 != Field2)
OR (Field1 IS NULL AND Field2 IS NOT NULL)
OR (Field1 IS NOT NULL AND Field2 IS NULL)

这是编写此代码的最佳方式,还是有更简洁/更好的方式来进行 Null/Not Null 比较?

最佳答案

我认为您可以用更简洁的方式编写过滤条件:

SELECT
ID,
Field1,
Field2
FROM
TestTable
WHERE
NOT((Field1 = Field2) OR (Field1 IS NULL AND Field2 IS NULL))
;

但是,这个查询会产生不正确的结果。您的变体是正确的。


Connect item关于@Heinzi 和 this answer 提到的提议的 IS DISTINCT FROM 运算符有一个链接到 Paul White 的一篇非常好的帖子:Undocumented Query Plans: Equality Comparisons .

在那篇文章中,Paul 解释说查询处理器已经有了这个运算符,它用于 INTERSECT 查询。

您的示例可以重写为:

SELECT
ID,
Field1,
Field2
FROM
TestTable AS T
WHERE
NOT EXISTS
(
SELECT T.Field1

INTERSECT

SELECT T.Field2
)
;
  • 它产生正确的结果
  • 有好的执行计划
  • 在这种形式中很容易添加更多字段进行比较

关于SQL Server 列比较,包括 Null/Not Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34909786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com