高效查询,根据多种条件删除记录

时间:2015-11-15 15:40:02

标签: sql oracle performance oracle10g sql-tuning

我有一张表格如下:

CREATE TABLE product
(
  PRODUCT   NVARCHAR2(20)                       NOT NULL,
  TYPE   NUMBER(5)                           NOT NULL,
  ID     NUMBER(10)                          NOT NULL,
  addDATE    DATE                                NOT NULL,
  TITLE     NVARCHAR2(80)                       NOT NULL
)

我必须根据列类型和addDate从表中删除记录。 有40种类型的产品,每种产品都有不同的删除标准。 以下是我目前使用的查询;

DELETE from PRODUCT where 
(type =1 and trunc(ADDdate) <  add_months( sysdate, -24 ))
OR 
(type =2 and trunc(ADDdate) <  add_months( sysdate, -12 ))
OR 
(type =3 and trunc(ADDdate) <  add_months( sysdate, 12 ))
.
..
.
.
OR 
(type =49 and trunc(ADDdate) <  add_months( sysdate, 1 ));

除了上面提到的查询之外,您能否建议我实现此方法的有效方法。

1 个答案:

答案 0 :(得分:1)

您应该有一个具有删除条件的表。 。 。这似乎是几个月。因此:

delete from product
    where trunc(AddDate) < (select add_months(sysdate, dtt.deletionmonths)
                            from DeleteTypeTable dtt
                            where dtt.type = product.type
                           );