PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да накарате външния ключ на дъщерната таблица да има същата стойност като основния ключ за автоматично нарастване на родителя

DEFAULT ще работи за SERIAL тъй като задава стойност по подразбиране за колона. И така

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

трябва да работи. Но PurchasedItem.purchaseID няма зададена стойност по подразбиране, така че се опитва да вмъкне NULL (и null все още не е в референтната колона), така че е неуспешно.

опитайте:

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

ще видите стойността на вмъкнатия purchaseID , използвайте го в следващата заявка:

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

Ако искате да се използва без интерактивност, използвайте DO блок с returning purchaseID into _value

актуализация :

или cte, нещо като

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. Как да комбинирате множество търсения на дати между CrudRepository на Spring Data JPA?

  2. HikariCP Postgresql Driver твърди, че не приема JDBC URL

  3. Какво да направите, когато py.test виси тихо?

  4. Изискването за първичен ключ в необработения SQL усложнява заявката в Django

  5. Име на динамична таблица в postgreSQL 9.3