【发布时间】:2015-05-02 06:38:02
【问题描述】:
在 PostgreSQL 中,我有 N 表,每个表由两列组成:id 和 value。在每个表中,id 是唯一标识符,value 是数字。
我想使用id 加入所有表,并且对于每个id,创建values 的总和,其中id 存在(意味着id 可能只存在在表的子集中)。
我正在尝试以下查询:
SELECT COALESCE(a.id, b.id, c.id) AS id,
COALESCE(a.value,0) + COALESCE(b.value,0) + COALESCE(c.value.0) AS value
FROM
a
FULL OUTER JOIN
b
ON (a.id=b.id)
FULL OUTER JOIN
c
ON (b.id=c.id)
但它不适用于id 存在于a 和c 中但不存在于b 中的情况。
我想我必须做一些括号,比如:
SELECT COALESCE(x.id, c.id) AS id, x.value+c.value AS value
FROM
(SELECT COALESCE(a.id, b.id), a.value+b.value AS value
FROM
a
FULL OUTER JOIN
b
ON (a.id=b.id)
) AS x
FULL OUTER JOIN
c
ON (x.id = c.id)
它只有 3 个表,而且代码已经够丑了,恕我直言。是否有一些优雅、系统的方法来连接N 表?不要迷失在我的代码中?
我还想指出,我在示例中做了一些简化。表a、b、c、...实际上是对几个物化视图进行相当复杂的查询的结果。但是语法问题还是一样。
【问题讨论】:
标签: postgresql join outer-join