2017-03-25 13 views
1

私はSELECTから得られた値を取得しようとし、その後、INSERTその値が、一緒に他の値を、別のテーブルにしています:PostgreSQLはVALUESとFROMでINSERTを受け入れませんか?

WITH data AS (SELECT name FROM programmes WHERE id = $1) 
INSERT INTO purchases (name, other_details, some_more_stuff) 
VALUES (data.name, $2, $3) FROM data; 

しかし、PostgreSQLは42601 ERROR: syntax error at or near "FROM" LINE 1: ...(data.name, $2, $3) FROM dataを与えます。

INSERTdocumentationは、VALUESFROMの例を同じクエリで一緒に指定しません。この種のクエリの正しい構文は何ですか?それとも、このようにクエリをフレーズすることはできませんか?

答えて

4

共通テーブル式は必要ありません。

INSERT INTO purchases (name, other_details, some_more_stuff) 
SELECT name, $2, $3 
FROM programmes 
WHERE id = $1 

適用しようとした構文が正しくありません。リストには定数のみが含まれている必要があるため、VALUESリストの表または問合せの列は使用できません。 the documentationから(強調追加):

VALUES実際にディスクテーブルを作成し、移入しなくても、クエリで使用することができます「定数テーブル」を生成するための方法を提供します。

VALUES syntax.

も参照してください。
2

使用insert . . . select

WITH data AS (
     SELECT name 
     FROM programmes 
     WHERE id = $1 
    ) 
INSERT INTO purchases (name, other_details, some_more_stuff) 
    SELECT data.name, $2, $3 
    FROM data; 

それだけではPostgresのではありません。これがSQLの仕組みです。正直言って、私はinsert . . . selectを使ってすべてをやることができるので、insert . . . valuesの学習は特に有用だとは思いません。 (「定数」サブクエリを許可しないMS Accessを使用している場合を除きます)

関連する問題