PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

INSERT em consulta única em 2 tabelas postgresql


Isso pode ser feito usando uma expressão de tabela comum de modificação de dados:
with new_order as (
  insert into orders (id, date) values (1, current_date)
  returning id
)
insert into completedby (employee_id, order_id)
values 
( 42 -- employee_id, 
  (select id from new_order)
);

A primeira parte é inserida nos orders tabela e retorna o ID que foi inserido. A segunda parte insere a linha no completedby table usando o employee_id conhecido e recuperando o order_id da etapa anterior.

Editar


se o id coluna nos orders tabela é uma serial coluna e você deseja deixar a sequência gerar o valor, você também pode fazer isso:
with new_order as (
  insert into orders (date) values (current_date)
  returning id
)
insert into completedby (employee_id, order_id)
values 
( 42 -- employee_id, 
  (select id from new_order)
);