108 votes

PostgreSql INSÉRER DE SÉLECTIONNER RETOUR ID

Dans PostgreSql 9.2.4, j'ai deux tables: user (id, login, password, name) et dealer (id, user_id).

Et je veux insérer dans les deux tables en retournant l'id du dealer créé.

Actuellement, je le fais avec deux requêtes:

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');

Mais puis-je implémenter ceci avec une seule requête INSERT en utilisant l'instruction RETURNING ?

149voto

mu is too short Points 205090

Il vous suffit d'ajouter un RETURNING id à votre INSERT ... SELECT :

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

Demo: http://sqlfiddle.com/#!12/75008/1

24voto

Blair Kjenner Points 169

Pour mes besoins, j'avais besoin de le mettre dans une variable, donc j'ai fait ceci:

INSERT INTO dealer (user_id)
    SELECT id
    FROM rows
    RETURNING id INTO l_dealerid;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X