所以这是我的第一个问题和第一天。提前谢谢。
我想执行以下查询 -
如果持续时间被违反,则将罚款放在books_return上,否则为零。 持续时间在book_issue中。所以我发现我可以计算return_date和issue_date之间的差异,如果它大于10,那么fine_amount将更新为20;否则将更新为零。但是,我遇到了以下查询语句的问题 -
UPDATE (
SELECT brt.fine_amount
FROM book_return brt, book_issue bi
WHERE brt.book_id = bi.book_id
AND brt.return_date - bi.issue_date > bi.issue_duration
) SET fine_amount = 20;
error - ORA-01779: cannot modify a column which maps to a non key-preserved table
如何启动此查询?
编辑:book_id和borrower_id是两个表的复合主键。
相关表格 -
答案 0 :(得分:0)
您可以使用merge
执行所需操作。如果您使用update
,则可以使用exists
:
UPDATE book_return brt
SET fine_amount = 20
WHERE EXISTS (SELECT 1
FROM book_issue bi
WHERE brt.book_id = bi.book_id AND
brt.return_date - bi.issue_date > bi.issue_duration
);