想要在特定查询后更新具有数值的列

Want to update a column with a number value following specific query

这是我的第一个问题,也是我第一天来这里。提前致谢。

我想执行以下查询 -

如果违反持续时间,则对 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 是两个表的复合主键。

相关表格-

你可以用 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
                 );