2017-10-27 19 views
0

CTE(WITHステートメント)が何かを返す必要があると聞きました。そうしないと、実行されないことがあります。私はCTE簡素化構造以下のいるPostgreSQL:CTEで何かを返す必要がありますか?

WITH 
selectA AS (
    SELECT ... 
), 
insertA AS (
    INSERT INTO ... 
    -- selecting something from selectA 
    RETURNING ... 
), 
insertB AS (
    INSERT INTO ... 
    -- selecting something from selectA and insertA 
    -- HERE no RETURNING! 
), 
selectB AS (
    SELECT ... 
    -- selecting something from selectA and insertA 
), 
insertForms AS (
    INSERT INTO ... 
    -- selecting something from selectB 
    -- HERE no RETURNING! 
), 
insertFormData AS (
    INSERT INTO ... 
    -- selecting something from selectB 
    -- HERE no RETURNING! 
) 
SELECT ... 
    -- selecting something from insertA and selectB 

それは動作しますが、私はすべてのCTEの部分が実行され得ることを引き起こして任意のコーナーケースを打つ場合、私は疑問に思って。 PostgreSQLのドキュメントでは、CTE内で返品部品が必要な場合は明確なヒントが見つかりませんでした。

誰もそれについてよく考えていますか? ありがとう!

答えて

4

が、私はすべてのコーナーケースを打つ場合、私は疑問に思って」 - RETURNINGが省略された場合、その行動は完全にin the manual

を文書化され、文はまだ実行されているが、それはできないので、それは何も出力しませんプライマリクエリによってテーブルとして参照される

+0

ありがとうございます。どうすればそれを逃すことができる –