0

我有两个不同的表,表 1 和表 2,每个表都有自己的一组值。我想检查一列以查看彼此之间是否存在任何差异以及UPDATE相应的 Table1。我有这个查询更新每一行,无论它们在我检查的值中是否不同:

UPDATE Table1
SET value = t2.value
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.ID = t2.ID

我尝试使用WHERE t1.value <> t2.value,但由于两者t1都可t2以为空,因此该功能无法正常工作。我想要一个只检查和更新它们的值t1t2不同的查询。

4

4 回答 4

2
...
WHERE t1.value <> t2.value
OR (t1.value IS NULL AND t2.value IS NOT NULL)
OR (t1.value IS NOT NULL AND t2.value IS NULL);
于 2013-08-01T00:16:37.363 回答
1

你可以继续where t1.id is not null and t2.ID is not null

例如:

UPDATE Table1
SET value = t2.value
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.ID = t2.ID
WHERE t1.value <> t2.value
AND t1.id is not null 
AND t2.ID is not null
于 2013-08-01T00:14:11.383 回答
1

where如果我正确理解了这个问题,您可以在一个子句中列出您想要进行更新的条件:

UPDATE Table1
    SET value = t2.value
    FROM Table1 t1 INNER JOIN
         Table2 t2
         ON t1.ID = t2.ID
   WHERE (table1.value <> t2.value) or
         (table1.value is null and table2.value is not null) or
         (table1.value is not null and table2.value is null)
于 2013-08-01T00:17:09.900 回答
0

使用 coalesce 为您的空值提供默认值怎么样?像这样更改您的 where 子句。

WHERE COALESCE(t1.value,'') <> COALESCE(t2.value,'')
于 2013-08-01T02:31:19.017 回答