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

Sådan får du den underordnede tabels fremmednøgle til at have samme værdi som forælderens primære auto-increment nøgle

DEFAULT fungerer for SERIAL da den indstiller standardværdi for kolonne. Så

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

burde virke. Men PurchasedItem.purchaseID har ingen standardværdi sat, så den forsøger at indsætte NULL (og null er ikke i den refererede kolonne endnu), så det mislykkes.

prøv:

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

du vil se værdien af ​​det indsatte purchaseID , brug det i næste forespørgsel:

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

Hvis du ønsker, at det skal bruges uden interaktivitet, skal du bruge DO blokere med returning purchaseID into _value

opdatering :

eller cte, ligesom

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. Er der nogen måde at indlejre power bi-rapporter og dashboards i vb.net eller C# desktop-applikation med sql server 2008-database?

  2. Hvordan forhindrer jeg en databasetrigger i at gentage sig?

  3. Filtrering og gruppering af data fra tabel med nøgle/værdi-par

  4. Sådan bruges variabler i en Oracle PL/SQL where-klausul