2013-10-03 22 views
34

PostgreSql 9.2.4'te iki tablom var: user (id, login, password, name) ve dealer (id, user_id).PostgreSql INSERT SELECT RETURNING ID

Ayrıca, oluşturulan satıcının kimliğini döndüren her iki tabloya da eklemek istiyorum.

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

Ama RETURNING deyimini kullanarak tek INSERT sorgu ile bu uygulayabilirsiniz:

Şu anda iki sorgu ile yapıyorum?

+0

düz metin olarak kullanıcılarınızın şifrelerini saklamak etmeyin! – nrlakin

cevap

56

Sadece bir RETURNING id sizin INSERT ... SELECT eklemek gerekir:

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

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

+0

Düşündüğümden daha kolay :) Teşekkürler! – Nailgun

İlgili konular