sql >> Base de Datos >  >> RDS >> PostgreSQL

INSERTAR en consulta única en 2 tablas postgresql

Esto se puede hacer usando una expresión de tabla común de modificación de datos:

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

La primera parte se inserta en los orders table y devuelve el ID que se insertó. La segunda parte luego inserta la fila en el completedby tabla utilizando el employee_id conocido y recuperando el order_id del paso anterior.

Editar

si el id columna en los orders la tabla es un serial columna y desea dejar que la secuencia genere el valor, también puede hacerlo:

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