2012-01-04 16 views
4

TABLE_A:PL/SQL:で複数の一致を持つUPDATEクエリWHERE句

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

:私はここに達成したい何

TYPE LIFE 
APPLE 3 
MANGO 2 
GRAPE 1 

TABLE_AEXPIRED
フィールドを更新することです現在の日付の時点でそのタイプがLIFEを超えている場合は、1の値になります(DATE_UPLOADED
)。

この更新クエリは、現在私が悩んでいる場所です。私はその
が間違っていることを知っています、それはあなたの助けが必要なところです。

更新クエリ:

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参照用 –

+0

おかげで、このような何かを試してみてください。別の問題だが、「同じソリューションを使用する」可能性がある。 – cr8ivecodesmith

答えて

4

2つのテーブルをリンクしていません。

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

これは有効なSQL for SQLです –

+0

良い点。そして、それは有効なANSI SQLではありません。編集されました。 –

+0

サブクエリ内でいくつかの集約を使用して、単一の行だけが返されることを確認することをお勧めします。それ以外の場合は、 "1行のクエリが複数の行を返した"エラーで失敗する可能性があります。エラー –

関連する問題