PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So erhalten Sie, dass der Fremdschlüssel der untergeordneten Tabelle denselben Wert wie der primäre Autoinkrementschlüssel der übergeordneten Tabelle hat

DEFAULT funktioniert für SERIAL da es den Standardwert für die Spalte festlegt. Also

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

sollte arbeiten. Aber PurchasedItem.purchaseID hat keinen Standardwert gesetzt, also versucht es, NULL einzufügen (und null ist noch nicht in der referenzierten Spalte), also schlägt es fehl.

versuche:

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

Sie sehen den Wert der eingefügten purchaseID , verwenden Sie es in der nächsten Abfrage:

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

Wenn Sie möchten, dass es ohne Interaktivität verwendet wird, verwenden Sie DO Block mit returning purchaseID into _value

aktualisieren :

oder cte, etw wie

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