sql - 如何更新 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;
解决方案
好的,如果我理解正确,您只需要对您的代码进行轻微更正:
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;
编辑:这也可以:
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;
推荐阅读
- spring - 测试 Spring 控制器时出现 EmptyResultDataAccessException
- android - adobe phonegap 谷歌地图不显示
- javascript - 单击颜色更改 - 布尔值
- javascript - 如何更新作为 Node.JS 中“express-mvc-platform”npm 模块一部分的猫鼬版本?
- mongodb - 分片集群 v4.2.x 上的 mongorestore 失败 错误:“恐慌:关闭通道”
- android - 如何将动态数组添加到 RecycleView
- php - 用于获取部分字符串的正则表达式
- rust - 如何获得从最小值到最大值的随机数
- java - 编码蝙蝠热身时遇到问题:max1020
- mysql - 如何根据列中的特定值从表中获取记录