PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

INSERT en requête unique dans 2 tables postgresql

Cela peut être fait à l'aide d'une expression de table commune de modification de données :

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 première partie s'insère dans les orders table et renvoie l'ID qui a été inséré. La deuxième partie insère ensuite la ligne dans le completedby table en utilisant le employee_id connu et en récupérant le order_id de l'étape précédente.

Modifier

si l'id colonne dans les orders table est un serial colonne et que vous souhaitez laisser la séquence générer la valeur, vous pouvez également le faire :

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