我有一个数据库,有几张桌子。其中一个是客户表,其中一个是租赁表,其中一个是租赁详细信息表。我们分别称他们为C
,R
和RD
。 RD
已租用date_in
和date_out
个工具,并通过R
的主键与RD
相关联。 R
已C
与customer id
相关联。
基本上我想要做的是选择(和删除)过去3年没有租用任何东西的客户。所以我不能使用date_out > sysdate - 3 years
[代表不准确的代码],因为该工具可能已经在4年前出租,而且上周也是,所以它需要保存在数据库中......我只需要删除过去3年内根本没有租用的工具。
我知道数据库结构被延迟但我无法改变它。
答案 0 :(得分:3)
delete from c
where not exists ( select *
from r join rd using(r_id)
where c_id=c.c_id and date_out>add_months(sysdate,-36) )
答案 1 :(得分:2)
如果我正确理解您的架构,您应该能够编写如下内容:
DELETE
FROM c
WHERE c_id NOT IN
( SELECT DISTINCT c_id
FROM r
WHERE r_id IN
( SELECT r_id
FROM rd
WHERE date_out > SYSDATE - (365 * 3 + 1)
)
)
;
删除过去三年内没有相应c
条记录且r
条记录的所有rd
条记录。 (对于“三年”,我使用365×3 + 1天,这是黑客但恕我直言。如果你愿意,你可以改善这一点。)
请注意,只有外键有ON DELETE CASCADE
时,上述内容才能正常使用;如果没有,那么您需要首先删除与这些客户相关联的r
和rd
记录。为此,您可以使用与上述查询相同的方法。