DEFAULT
sẽ hoạt động cho SERIAL
vì nó đặt giá trị mặc định cho cột. Vì vậy,
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
nên làm việc. Nhưng PurchasedItem.purchaseID
không có giá trị mặc định được đặt, vì vậy nó cố gắng chèn NULL
(và null chưa có trong cột được tham chiếu), vì vậy nó không thành công.
thử:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
bạn sẽ thấy giá trị của purchaseID
đã chèn , sử dụng nó trong truy vấn tiếp theo:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Nếu bạn muốn nó được sử dụng mà không cần tương tác, hãy sử dụng DO
chặn với returning purchaseID into _value
cập nhật :
hoặc cte, smth như
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