2017-01-27 4 views
0

このCTEでは、mytableの各行は、jointableに0または複数の行を結合できます。このクエリでjointablevalue列のarray_aggを返そうとしていますが、私はRETURNINGに集約できないというエラーが表示されます。Postgres CTEの左結合を集約する方法は?

WITH updated as(
    UPDATE mytable SET status = 'A' 
FROM 
    (
    SELECT id FROM mytable 
    WHERE status = 'B' 
    ORDER BY mycolumn 
    LIMIT 100 
    FOR UPDATE 
) sub 
    LEFT JOIN jointable j USING (id) 
WHERE mytable.id = sub.id 
GROUP BY (mytable.id) 
RETURNING mytable.id, array_agg(j.value) 
) 
select * 
from updated 
ORDER BY mycolumn 
+0

各テーブルのサンプル入力と、目的の終了状態をどのようにしたいのですか?私はあなたが何をしたいのかわからない。上記のsynaxは、あなたが 'mytable'の状態を変更しようとしていることを意味しています。 – Hambone

答えて

0

UPDATEステートメントでは、GROUP BY句を使用することはできません。また、UPDATEは、必ずしもすべての結合テーブルの一致する行を訪問するとは限らないため、とにかく戻ることはできません。

希望の結果を得るには、外部クエリでjointableに再度参加する必要があります。

関連する問題