PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

INSERT in una singola query in 2 tabelle postgresql

Questo può essere fatto usando un'espressione di tabella comune per la modifica dei dati:

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 prima parte si inserisce negli orders tabella e restituisce l'ID inserito. La seconda parte poi inserisce la riga nel completedby tabella utilizzando l'ID_impiegato noto e recuperando l'id_ordine dal passaggio precedente.

Modifica

se l'id nella colonna orders table è un serial colonna e vuoi lasciare che la sequenza generi il valore puoi farlo anche tu:

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