2013-10-03 11 views
34

In PostgreSql 9.2.4 Ich habe zwei Tabellen: user (id, login, password, name) und dealer (id, user_id).PostgreSql EINFÜGEN VON SELECT RETURNIEREN ID

Und ich möchte in beiden Tabellen die ID des angelegten Händlers zurückgeben.

Derzeit mache ich es mit zwei Abfragen: mit RETURNING Anweisung

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

Aber kann ich dies mit einer einzigen Abfrage INSERT implementieren?

+0

Bewahren Sie keine Ihrer Benutzer in Klartext-Passwörter! – nrlakin

Antwort

56

Sie brauchen nur ein RETURNING id zu Ihrem INSERT ... SELECT hinzuzufügen:

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

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

+0

Leichter als ich dachte :) Danke! – Nailgun

Verwandte Themen