PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak uzyskać klucz obcy tabeli podrzędnej, aby miał taką samą wartość jak podstawowy klucz autoinkrementacji rodzica?

DEFAULT będzie działać dla SERIAL ponieważ ustawia domyślną wartość dla kolumny. Więc

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

powinno działać. Ale PurchasedItem.purchaseID nie ma ustawionej wartości domyślnej, więc próbuje wstawić NULL (i wartość null nie jest jeszcze w kolumnie, do której istnieje odwołanie), więc kończy się niepowodzeniem.

spróbuj:

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

zobaczysz wartość wstawionego purchaseID , użyj go w następnym zapytaniu:

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

Jeśli chcesz, aby był używany bez interaktywności, użyj DO blok z returning purchaseID into _value

aktualizacja :

lub cte, coś takiego

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgreSQL.app :utwórz bazę danych

  2. Jaki jest najszybszy sposób na odbudowanie statystyk PostgreSQL od zera/zera za pomocą funkcji ANALYZE?

  3. Dane finansowe w PostgreSQL przy użyciu Javy

  4. Nieprawidłowa składnia w pobliżu „PROCEDURA” postgresql

  5. Skompresowane dzienniki archiwum PostgreSQL w systemie Windows