【发布时间】:2014-09-16 15:47:14
【问题描述】:
我正在尝试构建一个查询,在该查询中我使用table_b 和table_c 中包含的数据更新table_a。
我发现的所有UPDATE ... FROM 文档和问题似乎都集中在使用table_c 中的数据更新table_a,方法是通过table_b 加入。我不希望这样,我需要使用table_b 和table_c 中包含的数据,它们都与table_a 保持连接
一个示例选择是:
SELECT
a.id
, b.counted as count_b
, c.counted as count_c
FROM
table_a a
LEFT JOIN
table_b b on a.id = b.id
LEFT JOIN
table_c c on a.id = c.id
;
id | count_b | count_c
----+---------+---------
34 | 6 | 2
43 | 16 | 2
45 | 33 | 5
工作“一个表”-更新是:
UPDATE table_a SET count_b = table_b.counted
FROM table_b WHERE table_a.id = table_b.id;
UPDATE table_a SET count_c = table_c.counted
FROM table_c WHERE table_a.id = table_c.id;
但是我想将它们结合起来以提高效率(更新是插入+删除,因此可以节省一些钱。但我似乎无法弄清楚如何将两个表连接到 table_a 中一个UPDATE ... FROM。
我可以使用子查询来处理这个问题 - 但我宁愿避免这样做。
【问题讨论】:
-
有影响的重要问题:
a.id、b.id、c.id独特吗?他们每个人都可以失踪吗?counted或count_b等可以NULL吗? -
b.id 和 c.id 都是 a.id 的子集;可能不会有 b.id 或 c.id(这就是我使用左连接的原因)。
标签: sql postgresql join null sql-update