我正在尝试根据租约日期从桌子上删除一些成员。如果他们没有租用超过3年,他们可以删除。我面临的问题是一些成员最近租用了,这意味着查询仍然会提取他们的ID并删除所有数据,因为他们的记录上有一个日期表明DateOut值大于3年。
delete from (select *
from rental
inner join member
on rental.member_id = member.member_id
inner join rental_line
on rental.rental_id = rental_line.rental_id
where months_between(sysdate, dateout) > ( 36 ));
delete from member
where exists(select dateout
from rental
where member.member_id = rental.member_id
and months_between(sysdate, rental.dateout) > ( 36 ));
这是我正在运行以删除数据的两个脚本,它首先从租赁中提取出来,它们是外键中的ON CASCADE,它也从Rental_Line表中提取数据。 然后第二个查询运行以自由地从成员表中删除数据,因为由于先前从链接表中删除了相应的数据而没有任何完整性问题。
答案 0 :(得分:0)
Delete from rental r where r.member_id in (
select i.member_id
from rental i
group by i.member_id
having MONTHS_BETWEEN(sysdate, max(dateout))>(36)
);
DELETE FROM Member where not exists(
Select *
from rental
where Member.Member_ID = Rental.Member_ID
);
您刚刚删除了所有租借记录,除非您保留档案,否则您只是在寻找没有租赁的会员。如果不是这种情况,则需要为已清除的member_id创建临时保留表。