ВОЗВРАТ в операторе INSERT INTO с оператором SELECT - PullRequest
0 голосов
/ 03 июля 2019

Я вставляю данные в таблицу и хочу вернуть вставленные данные. Вставленные данные содержат внешние ключи. Я хотел бы получить все данные с помощью соединений внешних ключей.

Я попытался положить SELECT в ВОЗВРАТ без удачи. Это вообще возможно или мне просто нужно сделать еще один запрос после вставки данных?

Вставить утверждение:

INSERT INTO someTable (col1, col2, col3, foreign_id) 
VALUES  ('value1', 'value2', 'value3', 1);

Так что в этом случае, мог бы я получить ВОЗВРАТ, который в принципе дал бы мне:

SELECT someTable.*, foreignTable.* 
FROM someTable 
   JOIN foreignTable ON someTable.foreign_id = foreignTable.id;

Ответы [ 2 ]

1 голос
/ 03 июля 2019

demo: db <> fiddle

Для этого можно использовать CTE:

WITH inserting AS (
    INSERT INTO...
    RETURNING <new data>
)
SELECT i.*, ft.*
FROM inserting i JOIN foreign_table ft ...

В этом случае будет выполняться оператор INSERT.Оператор SELECT будет выполнен после этого.Это может ссылаться на вставленные данные.

1 голос
/ 03 июля 2019

Вы можете использовать CTE для этого:

with new_row as (
  INSERT INTO some_table (col1, col2, col3, foreign_id) 
  VALUES  ('value1', 'value2', 'value3', 1)
  returning *
)
SELECT new_row.*, ft.* 
FROM new_row
   JOIN foreign_table ft ON new_row.foreign_id = ft.id;
...