首页 > 解决方案 > Postgresql 将列从一个表更新到另一个表

问题描述

如何从 TABLE1 inventory_id 更新 TABLE2 中的 inventory_id?

到目前为止我已经尝试过

UPDATE TABLE2
SET 
inventory_id=t1.inventory_id
FROM TABLE2 t2
INNER JOIN
TABLE1 t1
ON t1.test_id = t2.test_id
WHERE t1.test_id = t2.test_id;

但这将 TABLE2 中 inventory_id 的所有值设置为 1 而不是我的预期结果。

TABLE1
inventory_id     test_id
1                         26
2                         56
3                         12
4                         67
TABLE2
test_id       inventory_id
12
26
56
67

就这样变成了这样?

TABLE2
test_id       inventory_id
12              3
26              1
56              2
67              4

标签: postgresql

解决方案


关于UPDATE状态的文档:

UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ]
...
    [ FROM from_item [, ...] ]

(...)

from_item

允许其他表中的列出现在 WHERE条件和更新表达式中的表表达式。FROM这使用与语句的子句相同的语法SELECT;例如,可以指定表名的别名。不要将目标表重复为 a from_item,除非您打算进行自联接(在这种情况下,它必须在 中出现别名from_item)。

(重点:我)

所以按照你想要的:

UPDATE table2 t2
       SET inventory_id = t1.inventory_id
       FROM table1 t1
            WHERE t1.test_id = t2.test_id;

db<>小提琴

您几乎拥有它,但似乎对您可能在其他 DBMS 中看到的语法感到困惑,并将它们混合在一起。


推荐阅读