-1

我正在尝试根据他们的租赁日期从他们的表中删除一些成员。如果他们没有租用超过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 表中提取数据。然后第二个查询运行以自由地从成员表中删除数据,因为没有任何完整性问题,因为之前从链接表中删除了相应的数据。

4

1 回答 1

1
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 创建一个临时保留表。

于 2012-12-03T05:42:32.143 回答