sql >> Database >  >> RDS >> PostgreSQL

Hoe u ervoor kunt zorgen dat de externe sleutel van de onderliggende tabel dezelfde waarde heeft als de primaire auto-incrementsleutel van de ouder?

DEFAULT werkt voor SERIAL omdat het de standaardwaarde voor kolom instelt. Dus

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

zou moeten werken. Maar PurchasedItem.purchaseID heeft geen standaardwaarde ingesteld, dus het probeert NULL . in te voegen (en null staat nog niet in de kolom waarnaar wordt verwezen), dus het mislukt.

probeer:

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

u ziet de waarde van de ingevoegde purchaseID , gebruik het in de volgende zoekopdracht:

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

Als je wilt dat het zonder interactiviteit wordt gebruikt, gebruik dan DO blok met returning purchaseID into _value

bijwerken :

of cte, zoiets als

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


  1. Mysql-fout #1305 FUNCTIE db.sys_exec bestaat niet

  2. Groovy SQL Oracle Array Functie/Procedure Uit Parameters Registratie

  3. Meerdere rijen verwijderen met ID's?

  4. Rails:een afbeelding uit een blob-veld in een database weergeven