SQL 比较和空值的问题

2024-02-26

我有一个更新查询,当一个表中的值与另一表中的字段不匹配时,该查询会更新一个表中的字段。

UPDATE  table1
SET     a.field1 = b.field3
FROM    table1 a ,
        table2 b
WHERE   a.field2 = b.field2
        AND a.field1 <> b.field3

我遇到的问题是,当 a.field1 为 null 且 b.field3 为值或 a.field1 为值且 b.field3 为 null 时,它不会被拾取。

我通过添加以下内容解决了这个问题......

UPDATE  table1
SET     a.field1 = b.field3
FROM    table1 a ,
        table2 b
WHERE   a.field2 = b.field2
        AND ( a.field1 <> b.field3
              OR (a.field1 IS NOT NULL
              AND b.field3 IS NULL)
              OR (a.field1 IS NULL
              AND b.field3 IS NOT NULL)
            )

我的问题更集中在为什么会发生这种情况以及如何最好地构建查询以防止这种情况发生?


问题在于 NULL 比较。如果 a.field1 或 b.field3 为 NULL,则需要使用 IS NULL 或 IS NOT NULL 语句。您可以使用 ISNULL 函数为 a.field1 和 b.field3 使用默认值。

ISNULL(a.field1,0) <> ISNULL(b.field3,0)

在本例中,与值 0 进行比较。

SELECT IIF(NULL=NULL,'true','false')  -- The result is false.  Amazing!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL 比较和空值的问题 的相关文章

随机推荐