Sql 如何更新表中与其他表不同的行?
我有两张桌子Sql 如何更新表中与其他表不同的行?,sql,postgresql,Sql,Postgresql,我有两张桌子 boxes id, name, width, height, is_changed 1, ben, 10, 12, false 2, carol, 13, 10, false 3, david, 2, 33, false 4, ellen, 9, 17, false boxes_new id, name, width, height 1, ben, 1000, 12 2, xavier, 13, 10 3, david, 2, 33 4, ellen, 9, 17 请注意,框1
boxes
id, name, width, height, is_changed
1, ben, 10, 12, false
2, carol, 13, 10, false
3, david, 2, 33, false
4, ellen, 9, 17, false
boxes_new
id, name, width, height
1, ben, 1000, 12
2, xavier, 13, 10
3, david, 2, 33
4, ellen, 9, 17
请注意,框1和框2在框2中不同
我想做一些像
UPDATE boxes SET is_changed=true WHERE boxes.name != boxes_new.is_name OR boxes.width != boxes_new.width
此外,如果出于性能原因,这些表将有数十万行。假设id匹配两个框:
update boxes b
set is_changed = true
from boxes_new bn
where bn.id = b.id and
(b.name <> bn.name or
b.width <> bn.width or
b.height <> bn.height
);
更新框集为_changed=true,其中id不在从框b内部连接框中选择b.id_bname=bn.name和b.width=bn.width上的新bn 如果可以使用空值,为了涵盖所有可能的情况,您必须使用:
列可以为空吗? I think some nested query like this, could help,
UPDATE boxes b
SET is_changed = TRUE
FROM boxes_new b1
WHERE b.id = b1.id
AND (b.name, b.width, b.height) IS DISTINCT FROM (b1.name, b1.width, b1.height);