2013-12-11 9 views
5

Я искал для ответа, и это кажется окончательным, но я решил, что я дважды проверю сообщество Stack Overflow:
Вот что я пытаюсь сделать:INSERT INTO ... RETURNING несколько столбцов (PostgreSQL)

INSERT INTO my_table VALUES (a, b, c) 
RETURNING (SELECT x, y, z FROM x_table, y_table, z_table 
WHERE xid = a AND yid = b AND zid = c) 

Я получаю сообщение о том, что я не могу вернуть более одной колонки.
Это работает, если я скажу SELECT x FROM x_table WHERE xid = a.

Возможно ли это в одном запросе, а не в создании отдельного запроса SELECT?

Я использую PostgreSQL 8.3.

ответ

4

@corvinusz ответ был неправильным для 8.3, но дал мне отличную идею, которая сработала так спасибо!

INSERT INTO my_table VALUES (a, b, c) 
RETURNING (SELECT x FROM x_table WHERE xid = a), 
    (SELECT y FROM y_table WHERE yid = b), 
    (SELECT z FROM z_table WHERE zid = c) 

Я понятия не имею, почему так, как указано в вопросе, недействительно, но по крайней мере это работает.

9

Попробуйте это.

with aaa as (
    INSERT INTO my_table VALUES(a, b, c) 
    RETURNING a, b, c) 
SELECT x, y, z FROM x_table, y_table, z_table 
WHERE xid = (select a from aaa) 
    AND yid = (select b from aaa) 
    AND zid = (select c from aaa); 

В 9.3 аналогичный запрос работает.

+0

Неплохо. Как я уже упоминал, используя 8.3. – itchy23

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