想要在特定查询后更新具有数值的列
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
);
这是我的第一个问题,也是我第一天来这里。提前致谢。
我想执行以下查询 -
如果违反持续时间,则对 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
);