Как выбрать результат возврата - PullRequest
0 голосов
/ 20 февраля 2019

Как поместить результат предложения RETURNING в SELECT в PostgreSQL?Т.е. я хотел бы, чтобы оператор SELECT возвращал все, что возвращает RETURNING.

Я пробовал следующие два синтаксиса, но ни один из них не работает:

(1) SELECT (INSERT INTO ... RETURNING *)

(2) SELECT * FROM (INSERT INTO ... RETURNING *) ...

Вы можете спросить, почему я пытаюсь это сделать, несмотря на то, что RETURNING уже дает мне желаемый результат?Это потому, что у меня есть структура, использующая два предложения WITH, и вставка будет во втором, но мне также нужны результаты первого.(См. связанный вопрос .)

Примечание: к сожалению, я не могу предоставить конкретный запрос SQL (потому что он находится в продукте с закрытым исходным кодом), но я думаю, что вопрос достаточно общий, чтобыответственность без этого конкретного запроса.

РЕДАКТИРОВАТЬ Добавлен пример:

Предположим, у нас есть эта таблица:

CREATE TABLE test(id INT, name VARCHAR)

Thisработает:

INSERT INTO test VALUES (1, 'Joe') RETURNING *

Что я пытаюсь сделать, но не работает:

SELECT INSERT INTO test VALUES (1, 'Joe') RETURNING *

SELECT * FROM INSERT INTO test VALUES (1, 'Joe') RETURNING *

1 Ответ

0 голосов
/ 20 февраля 2019

insert ... returning * уже вернет набор результатов, нет необходимости добавлять к нему оператор SELECT.

Но если вы настаиваете, вы можете сделать

with i as (
   INSERT INTO test VALUES (1, 'Joe') 
   RETURNING *
)
select *
from i;

Но это точно так же, как:

INSERT INTO test VALUES (1, 'Joe') 
RETURNING *
...