首页 > 解决方案 > 如何更新 postgres 中其他表的值

问题描述

目前我有 3 张桌子

表格1:

tb1_id 价值观
1 4

表 2:

tb1_id tbl3_id
1 5

表3:

tb3_id 价值观
5 2

由于某种原因,表 1 中的值与表 3 中的值不同(如上所示),我需要用表 3 更新表 1 的值,但我无法这样做,到目前为止这是我的询问:

UPDATE
    table1 t1
SET 
    values =  temp_tbl.values
FROM 
    (
        SELECT t2.tb1_id, t3.values FROM table2 t2
        JOIN 
        table3 t3 ON t2.tbl3_id = t3.tbl3_id
    ) temp_tbl
WHERE 
      t1.tbl1_id = temp_tbl.tbl1_id
AND
    t1.values != temp_tbl.values;

标签: sqlpostgresql

解决方案


好的,如果我理解正确,您只需要对您的代码进行轻微更正:

UPDATE
    table1 t1
SET 
    values =  temp_tbl.values
FROM 
    (
        SELECT t2.tbl1_id, t3.values 
        FROM table2 t2
        Inner JOIN table3 t3 ON t2.tbl3_id = t3.tbl3_id
    ) temp_tbl
WHERE 
      t1.tbl1_id = temp_tbl.tbl1_id
AND
    t1.values != temp_tbl.values;

这是DBFiddle 链接。

编辑:这也可以:

with newData as (
   select t1.tbl1_id, t3.Values
   from Table1 t1
   inner join Table2 t2 on t1.Tbl1_Id = t2.Tbl1_Id
   inner join Table3 t3 on t2.Tbl3_Id = t3.Tbl3_Id
   where t1.Values != t3.Values
)
UPDATE
    table1
SET 
    values = newData.Values
FROM newData 
where table1.tbl1_id = newData.tbl1_id;

推荐阅读