如何用NULL值更新列



我有两个表

Tb1

ID  Name  Birthdate
--------------------
1   Ball  NULL
2   Tire  2022-01-01
3   Ball  1900-01-01

Tb2

ID     Name  Birthdate
------------------------
NULL   Ball  NULL
NULL   Tire  2022-01-01
NULL   Ball  1900-01-01

我想更新Tb2.ID跟随Tb1.ID,所以这里是我的脚本

UPDATE Tb2.ID = Tb1.ID
FROM Tb2
LEFT JOIN Tb1 ON Tb2.Name = Tb1.Name
AND ISNULL (Tb2.Birthdate, '') = ISNULL (Tb1.Birthdate, '')
WHERE Tb2.ID IS NULL

结果是ID 1在Tb2中有2行如下表

生日2022-01-011900-01-01

尝试:

UPDATE Tb2
SET Tb2.ID = Tb1.ID
FROM Tb2
LEFT JOIN Tb1
ON Tb2.Name = Tb1.Name
AND ISNULL(Tb2.Birthdate,'9999-12-31') = ISNULL(Tb1.Birthdate,'9999-12-31')
WHERE Tb2.ID IS NULL

我认为空字符串转换为1900-01-01在你的ISNULLs,使用无效的(但不是1900-01-01)日期为NULL出生日期将解决这个问题。

如果您正在使用SQL Server 2022(或更高版本),您也可以使用新的IS [NOT] DISTINCT FROM语法。这允许比较空值和非空值。

UPDATE Tb2
SET ID = Tb1.ID
FROM Tb2
JOIN Tb1
ON Tb2.Name = Tb1.Name
AND Tb2.Birthdate IS NOT DISTINCT FROM Tb1.Birthdate
WHERE Tb2.ID IS NULL

请注意,这里不需要左连接,因为您实际上只希望在匹配时进行更新。请使用内连接。

请参阅此数据库<>小提琴,以获取DISTINCT FROM的快速演示。

相关内容

  • 没有找到相关文章

最新更新