2013-10-03 7 views
34

В PostgreSql 9.2.4 У меня есть две таблицы: user (id, login, password, name) и dealer (id, user_id).PostgreSql INSERT FROM SELECT RETURNING ID

И я хочу вставить в обе таблицы, возвращающие идентификатор созданного дилера.

В настоящее время я делаю это с двумя запросами:

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

Но я могу осуществить это с помощью одного запроса с использованием INSERTRETURNING заявления?

+0

Не храните пароли ваших пользователей в виде простого текста! – nrlakin

ответ

56

Вам просто нужно добавить RETURNING id к вашему INSERT ... SELECT:

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

Демо: http://sqlfiddle.com/#!12/75008/1

+0

Легче, чем я думал :) Спасибо! – Nailgun

Смежные вопросы