sql >> Databáze >  >> RDS >> PostgreSQL

Jak dosáhnout toho, aby cizí klíč podřízené tabulky měl stejnou hodnotu jako primární klíč automatického přírůstku rodiče

DEFAULT bude fungovat pro SERIAL protože nastavuje výchozí hodnotu pro sloupec. Takže

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

měl by pracovat. Ale PurchasedItem.purchaseID nemá nastavenou žádnou výchozí hodnotu, takže se snaží vložit NULL (a null ještě není v odkazovaném sloupci), takže selže.

zkuste:

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

uvidíte hodnotu vloženého purchaseID , použijte jej v dalším dotazu:

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

Pokud chcete, aby se používal bez interaktivity, použijte DO zablokovat s returning purchaseID into _value

aktualizovat :

nebo cte, něco jako

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. Rails 5 SQL Injection

  2. MySQL nahradit zástupným znakem

  3. PHP – Upozornění:Nedefinovaný index:

  4. MySQL:nelze získat přístup k účtu root