2014-10-07 122 views
2

不能使用聚合函數我有我移植到PostgreSQL的Oracle查詢:PostgreSQL的:在UPDATE

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語句。

但是如果我重寫查詢如下:

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

所以我想不出如何編寫這個查詢。

+0

我認爲你的第二個版本應該在9.3 PostgreSQL的工作。 – Eelke 2014-10-07 13:35:19

+0

@Eelke對不起,我忘了指定我在9.1 – Teejay 2014-10-07 13:42:47

回答

1

試試這個:

UPDATE "SPD_PG"."TT_SPLDR_11A2F324_29" 
    SET "SECT_ORDER" = (SELECT 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) 
        ) 
+0

謝謝,它的作品。我想如果我有超過1個值設置,我將不得不重複每個值的子查詢...? – Teejay 2014-10-07 13:47:33

+0

是的,您需要爲每個值重複此子查詢。但是在表中存儲聚合值是一個不好的主意。你有沒有聽說過正常化?如果我是你,我會使用一個視圖。 – zaratustra 2014-10-07 13:58:42

+0

這是用於在數據庫中加載配置的批處理過程。我需要對已經存在的數據進行一些調整,並且我需要'MAX(「SECT_ORDER」)'作爲特定​​的'DOC_ID'(想象Excel中的表格)。 – Teejay 2014-10-07 14:06:01

相關問題