2011-03-06 88 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)) 

你自然要考慮如何處理那些只被剛纔介紹(如周齡),從來沒有銷售的產品做。