Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何更新表中与其他表不同的行?_Sql_Postgresql - Fatal编程技术网

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);