web-dev-qa-db-ja.com

SELECT RETURNING IDからのPostgreSql INSERT

PostgreSql 9.2.4には、user (id, login, password, name)dealer (id, user_id)の2つのテーブルがあります。

そして、作成されたディーラーのIDを返す両方のテーブルに挿入したいと思います。

現在、私は2つのクエリでそれをやっています:

WITH rows AS (
    INSERT INTO "user"
        (login, password, name)
    VALUES
        ('dealer1', 'jygbjybk', 'Dealer 1')
    RETURNING id
)
INSERT INTO dealer (user_id)
    SELECT id
    FROM rows;
SELECT currval('dealer_id_seq');

しかし、INSERTステートメントを使用して、単一のRETURNINGクエリでこれを実装できますか?

45
Nailgun

RETURNING idINSERT ... SELECTに追加するだけです。

WITH rows AS (...)
INSERT INTO dealer (user_id)
    SELECT id
    FROM rows
    RETURNING id;

デモ: http://sqlfiddle.com/#!12/75008/1

69
mu is too short