gpt4 book ai didi

sql - 当一个值为 null 时未拾取不匹配

转载 作者:行者123 更新时间:2023-12-05 05:28:10 24 4
gpt4 key购买 nike

我有一个简单的 SQL 查询,其中比较两个表中不匹配的值。昨天,我们发现了一个字段为空而另一个字段不为空的问题,但未检测到不匹配。据我所知,直到昨天,逻辑一直有效。以下是 SQL 的逻辑:

CREATE TABLE Table1
(UserID INT,PlayDate DATETIME)

CREATE TABLE Table2
(UserID INT,PlayDate DATETIME)

INSERT INTO Table1 (UserID)
SELECT 5346

INSERT INTO Table2 (UserID,PlayDate)
SELECT 5346,'2012-11-01'

SELECT a.UserID
FROM Table1 a
INNER JOIN
Table2 b
ON a.UserID = b.UserID
WHERE a.PlayDate <> b.PlayDate

即使 PlayDate 值不同,也不会返回任何值。

我现在已经更新了 WHERE 以阅读:

WHERE  ISNULL(a.PlayDate,'') <> ISNULL(b.PlayDate,'')

SQL 中是否有某个设置可以被更改以导致原始代码不再获取字段中的差异?

谢谢

最佳答案

NULL <> anything

unknown不是 true . SQL 使用三值逻辑 (false/true/unknown) 并且谓词需要评估为 truewhere要返回的行的子句。

事实上在标准 SQL 中与 NULL 的任何比较除了 IS [NOT] NULL产量 unknown .包括WHERE NULL = NULL

您没有声明 RDBMS,但如果它支持 IS DISTINCT FROM你可以使用它,或者如果你使用的是 MySQL,它有一个 null 安全相等运算符 <=> 你可以否定。

你说你认为它以前的行为不同。如果您使用的是 SQL Server,则可能会为 ANSI_NULLS 使用不同的设置不知何故,但此设置已被弃用,无论如何您都应该重写任何依赖于它的代码。

你可以模拟IS DISTINCT FROM在 SQL Server 中使用 WHERE EXISTS (SELECT a.PlayDate EXCEPT SELECT b.PlayDate)

关于sql - 当一个值为 null 时未拾取不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13452089/

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