2013-10-03 8 views
34

W PostgreSql 9.2.4 Mam dwie tabele: user (id, login, password, name) i dealer (id, user_id).PostgreSql INSERT OD WYBÓR ZWRÓCENIA ID

I chcę wstawić do obu tabel, zwracając identyfikator utworzonego sprzedawcy.

Obecnie robię to z dwóch zapytań:

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

Ale mogę wdrożyć to z jednym INSERT zapytania używając RETURNING oświadczenie?

+0

Nie przechowywać haseł użytkowników w postaci zwykłego tekstu! – nrlakin

Odpowiedz

56

Wystarczy dodać RETURNING id do INSERT ... SELECT:

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

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

+0

Łatwiej niż myślałem :) Dzięki! – Nailgun