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

Come ottenere la chiave esterna della tabella figlio per avere lo stesso valore della chiave di incremento automatico principale del genitore

DEFAULT funzionerà per SERIAL poiché imposta il valore predefinito per la colonna. Quindi

INSERT INTO Purchase VALUES (DEFAULT,'Lendl');

dovrebbe funzionare. Ma PurchasedItem.purchaseID non ha un valore predefinito impostato, quindi tenta di inserire NULL (e null non è ancora nella colonna referenziata), quindi non riesce.

prova:

INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;

vedrai il valore di purchaseID inserito , usalo nella query successiva:

INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;

Se vuoi che venga utilizzato senza interattività, usa DO blocca con returning purchaseID into _value

aggiornamento :

o cte, smth come

WITH i AS (
  INSERT INTO Purchase(custName, orderedDate) 
  VALUES ('Lendl', '2016-09-28') 
  RETURNING purchaseID
)
insert into PurchasedItem
select i.purchaseID,'smth',3
from i