【发布时间】:2014-10-07 21:36:44
【问题描述】:
我有一个移植到 PostgreSql 的 Oracle 查询:
UPDATE "SPD_PG"."TT_SPLDR_11A2F324_29"
SET "SECT_ORDER" = MAX("SECTIONS"."SECT_ORDER")+1 FROM "SPD_PG"."SECTIONS"
INNER JOIN "SPD_PG"."META_SECTIONS" ON ("SECTIONS"."META_SECT_ID"="META_SECTIONS"."META_SECT_ID")
WHERE ("META_SECTIONS"."META_SECT_ORDER"="TT_SPLDR_11A2F324_29"."META_SECT_ORDER"-1)
AND ("SECTIONS"."DOC_ID"="TT_SPLDR_11A2F324_29"."DOC_ID")
AND ("TT_SPLDR_11A2F324_29"."META_SECT_ORDER">0)
这给我:ERROR: cannot use aggregate function in UPDATE,好像 PostgreSql 不支持更新语句中的MAX。
但是,如果我将查询重写如下:
UPDATE "SPD_PG"."TT_SPLDR_11A2F324_29"
SET "SECT_ORDER" = "MAX_VALUE" FROM (
SELECT MAX("SECTIONS"."SECT_ORDER")+1 AS "MAX_VALUE" FROM "SPD_PG"."SECTIONS"
INNER JOIN "SPD_PG"."META_SECTIONS" ON ("SECTIONS"."META_SECT_ID"="META_SECTIONS"."META_SECT_ID")
WHERE ("META_SECTIONS"."META_SECT_ORDER"="TT_SPLDR_11A2F324_29"."META_SECT_ORDER"-1)
AND ("SECTIONS"."DOC_ID"="TT_SPLDR_11A2F324_29"."DOC_ID")
AND ("TT_SPLDR_11A2F324_29"."META_SECT_ORDER">0)
) "TBL_ALIAS"
上面写着ERROR: subquery in FROM cannot refer to other relations of same query level。
所以我不知道如何编写这个查询。
【问题讨论】:
-
我认为您的第二个版本应该适用于 postgresql 9.3。
-
@Eelke 对不起,我忘了说明我在 9.1
标签: postgresql sql-update aggregate-functions