gpt4 book ai didi

sql - 为什么我的 SQL 查询 != "Some Value"不返回任何 NULL 行?

转载 作者:行者123 更新时间:2023-12-02 07:27:20 25 4
gpt4 key购买 nike

我正在为我的 MVC 项目查询一个 Oracle 数据库,我在我的 SQL 中发现了一些我很好奇的东西。为什么此查询不返回 VALIDATED_BY 列为 NULL 的行?

SELECT *
FROM DM_SSA_DEV.REQUESTS
WHERE BATCH_ID = 1399
AND VALIDATED_BY <> 'AUTOUSER'

当我注释掉最后一行时,我得到了预期的 481 个结果:

SELECT *
FROM DM_SSA_DEV.REQUESTS
WHERE BATCH_ID = 1399
--AND VALIDATED_BY <> 'AUTOUSER'

最后我发现我可以通过显式处理 NULL 来规避这个问题。这是正确的做法还是有更好的方法,为什么?

SELECT *
FROM DM_SSA_DEV.REQUESTS
WHERE BATCH_ID = 1399
AND (VALIDATED_BY <> 'AUTOUSER' OR VALIDATED_BY IS NULL)

附言我也在我的项目中真正使用了 Linq,所以这是我使用的代码。最有效?

db.REQUESTS.Where(r => r.BATCH_ID == batchId && (r.VALIDATED_BY != "AUTOUSER" || r.VALIDATED_BY == NULL)).ToList<REQUEST>();

最佳答案

NULL 从不 等于 ( = ) 任何其他值,甚至是另一个 NULL(它有点像浮点 NaN)。这还包括涉及 NULL 的相等表达式。

意图可以表示为x = y OR (y IS NULL and x IS NULL) ,当 NULL 值被视为相等时。

不等于或 NULL-and-not-equal 的特例是 x <> y OR x IS NULL ,假设 y 永远不会为 NULL。

另一种选择是合并,COALESCE(x, '*') = COALESCE(y, '*') ,取决于优化器的可信度以及合并值与 NULL 的相等性。可能还有其他供应商扩展。

LINQ/EF 将翻译 x == null (C#,null 必须是常量表达式)到x IS NULL (SQL)。

关于sql - 为什么我的 SQL 查询 != "Some Value"不返回任何 NULL 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26554462/

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