2011-03-06 125 views
1

我想更新1年内未购买的产品的价格。我怎么做?更新和嵌套的select语句?

我当前的查询是:

UPDATE product 
    SET price = price * 0.9 
WHERE date_purchase > SYSDATE - 365 
    AND pid IN ([How do i select the items thats not been purchased in 1year??]); 

我有2个表:

  • 产品=> PID,p_name,等...(PID =产品ID,p_name =产品名称)
  • 购买=> PID,date_purchase等
+0

我们有其他的表吗?这是功课吗? – rene 2011-03-06 15:21:24

+0

@rene:2表格:产品和购买。不,它不是功课。我在编辑的问题中提供了2个表格的更多细节 – miracle 2011-03-06 15:22:33

+0

注意:1年不等于365天。一年前你可以使用'ADD_MONTHS(SYSDATE,-12)'。 – 2011-03-07 06:25:50

回答

0

我认为这可能接近

update product 
set price = price * 0.9 
where pid NOT IN (
    select pr.pid 
    from product pr 
    left outer join purchase pu 
    on pu.pid = pr.pid 
    where ((pu.date_purchase != null) 
      AND pu.date_purchase < (SYSDATE - 365)) 
    or pu.pid == null 
); 
2

我会去与一个不存在,因为它使需求更透明。

update product 
set price = price * 0.9 
where not exists 
    (select 1 from PURCHASE pchase 
    WHERE pchase.pid = PRODUCT.pid 
    and pchase.date_purchase > add_months(sysdate,-12)) 

你自然要考虑如何处理那些只被刚才介绍(如周龄),从来没有销售的产品做。