2012-01-04 83 views
4

TABLE_A:PL/SQL:更新查詢與多個匹配WHERE子句

ID  TYPE DATE_UPLOADED EXPIRED 
9872 APPLE 03-JAN-11  0 
9874 MANGO 03-JAN-11  0 
9873 GRAPE 03-JAN-11  0 

表-B:

TYPE LIFE 
APPLE 3 
MANGO 2 
GRAPE 1 

我想什麼在這裏實現的是更新的TABLE_AEXPIRED
場到1的值爲DATE_UPLOADED
已超過它的當前日期的該類型的LIFE

此更新查詢是我目前堅持的地方。我知道它的錯誤
,這是我需要你的幫助。

更新查詢:

UPDATE TABLE_A 
SET EXPIRED = 1 
WHERE EXPIRED = 0 
AND (TRUNC(SYSDATE) - TRUNC(DATE_UPLOADED)) > 
(
    SELECT LIFE 
    FROM TABLE_B 
); 

請注意,TYPE場可以是任何東西,並且可以更
比什麼是樣本數據中給出。

+2

可能重複:http://stackoverflow.com/questions/2446764/oracle-update-statement-with-inner-join – 2012-01-04 16:21:20

+0

感謝您的參考。不同的問題,但'可以'使用相同的解決方案。 – cr8ivecodesmith 2012-01-04 16:23:14

回答

4

您不鏈接這兩個表。嘗試是這樣的:的

UPDATE TABLE_A 
SET EXPIRED = 1 
WHERE EXPIRED = 0 
AND (TRUNC(SYSDATE) - TRUNC(DATE_UPLOADED)) > 
(
    SELECT LIFE 
    FROM TABLE_B 
    WHERE TYPE = TABLE_A.TYPE 
); 
+1

這對於Oracle來說無效SQL – 2012-01-04 16:13:43

+0

好點。我相信這不是有效的ANSI SQL。編輯。 – 2012-01-04 16:16:50

+0

在子查詢中使用一些聚合可能是一個好主意,以確保只返回一行。否則,它可能會失敗,並顯示「單行查詢返回多行」錯誤 – 2012-01-04 16:21:54