【发布时间】:2018-04-10 10:27:31
【问题描述】:
所以我正在更改数据库结构。我正在将一列“大小”从 table_B 移动到 table_A。 Table_B 可以有多个引用 table_A.a_id 的条目
我想用具有最高 b_id 的行从 table_B 更新 table_A 中的新“大小”列。
所以我可以使用 Max() 和 group by 为每个 a_id 选择最高的 b_id。
SELECT max(b_id)
FROM table_B
GROUP BY a_id;
但我不确定如何将其与更新选择相匹配
UPDATE table_A
SET table_A.size = table_B.size
FROM table_A, table_B
WHERE table_A.a_id = table_B.a_id
AND table_B.b_id =
(
max...
);
编辑: 我现在意识到这实际上不是更新选择,我的第一次尝试是
table_B 的外观和 table_A 中的预期结果
table_A
a_id | size
-------------------------
1 | 5678
2 | 456
table_B
b_id | a_id | size
--------------------------------------
1 | 1 | 1234
2 | 1 | 5678
3 | 2 | 456
【问题讨论】:
-
不要不在
from子句中重复目标表。 -
尝试先用 group by 选择 CTE,然后
update from CTE where?.. -
样本数据和期望的结果真的很有帮助。
标签: sql postgresql