Oracle找到过去3年没有租用的客户

时间:2012-11-28 16:43:52

标签: sql database oracle

我有一个数据库,有几张桌子。其中一个是客户表,其中一个是租赁表,其中一个是租赁详细信息表。我们分别称他们为CRRDRD已租用date_indate_out个工具,并通过R的主键与RD相关联。 RCcustomer id相关联。

基本上我想要做的是选择(和删除)过去3年没有租用任何东西的客户。所以我不能使用date_out > sysdate - 3 years [代表不准确的代码],因为该工具可能已经在4年前出租,而且上周也是,所以它需要保存在数据库中......我只需要删除过去3年内根本没有租用的工具。

我知道数据库结构被延迟但我无法改变它。

2 个答案:

答案 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时,上述内容才能正常使用;如果没有,那么您需要首先删除与这些客户相关联的rrd记录。为此,您可以使用与上述查询相同的方法。