【发布时间】:2013-11-21 09:26:43
【问题描述】:
我正在尝试使用连接、子查询和聚合函数编写一个有点复杂的 POSTGRES 查询。一切正常,但有一件事。代码如下:
SELECT
table1.id AS id1,
table1.name AS name,
table1.table2_fkey AS id2
table2.name AS name2,
table2.id,
month_sum
FROM table1
LEFT JOIN table2 ON (table1.table2_fkey = table2.id)
INNER JOIN (
SELECT sum(months) AS month_sum FROM (
SELECT (month_1 + month_2 + month_3 + month_4 + month_5 + month_6 + month_7 + month_8 + month_9 + month_10 + month_11 + month_12) as months FROM table2_places_years WHERE table2_places_fkey IN (
SELECT id FROM table2_places WHERE table2_people_fkey IN (
SELECT id FROM table2_people WHERE table2_fkey = table2.id
)
)
) AS months
) AS month_sum ON (table2.id = id2)
(我简化了列名和表名)
问题是第二个 JOIN 中的最后一个子查询无法从第一个连接访问 table2,因此会引发错误。如果我从最后一个子查询中删除 where 子句,查询运行良好,但会得到“table2_places_years”中所有行的总和。我只想要与 table2 中的当前条目关联的行的总和(通过另外三个表与 fkeys 链接)。
有没有办法“让子查询知道”第一个连接子句中的列?
提前致谢!
注意:这段代码可能无法正常工作,因为我做了一些简化。
【问题讨论】:
标签: sql postgresql