2016-04-07 5 views
0

次のoracle相関問合せを取得して、レコードのサブセクションのみで更新を実行することはできません。現在、すべてのレコードを更新します。私は希望UPDATEステートメントを記述しようとしています相関更新問合せ

employee_id status 
--------------------- 
1000   failed 
1001   closed 
1002   open 
1003   open 
1004   close 
1005   open 
1006   open 

:私はビューのように見える(VW_STATUS)を持っている

request_id employee_id status 
------------------------------------ 
1    1000 
1    1001 
2    1003 
2    1004 
2    1005 
3    1006 

私は次のようになりますどのテーブル(TBL_REQUESTS)を持っていますTBL_REQUESTSの従業員のステータスフィールドを、TBL_REQUESTS.request_idが渡された値と等しいVW_STATUSから対応するステータスで更新します。 VW_STATUSには従業員一人あたりレコード数が2以上あることがありますが、それが問題になる場合は、VIEWで修正する方法を常に探すことができます。

TBL_REQUESTSのすべての行を更新この試み:

UPDATE TBL_REQUESTS r1 
SET r1.status = 
    (SELECT s.status 
    FROM VW_STATUS s 
    INNER JOIN TBL_REQUESTS r2 ON s.employee_id = r2.employee_id 
    WHERE rd2.request_id = 2) 
WHERE EXISTS 
    (SELECT s.status 
    FROM VW_STATUS s 
    INNER JOIN TBL_REQUESTS r2 ON s.employee_id = r2.employee_id 
    WHERE rd2.request_id = 2) 

答えて

1

私はこのクエリを記述するより良い方法は、このかもしれないと思う -

UPDATE TBL_REQUESTS r1 
SET r1.status = 
    (SELECT s.status 
    FROM VW_STATUS s 
    INNER JOIN TBL_REQUESTS r2 ON s.employee_id = r2.employee_id 
    WHERE rd2.request_id = 2) 
WHERE r1.employee_id in 
    (SELECT s.employee_id 
    FROM VW_STATUS s 
    INNER JOIN TBL_REQUESTS r2 ON s.employee_id = r2.employee_id 
    WHERE rd2.request_id = 2) 

これが唯一のそのemployee_ids上で実行するクエリを制限する必要がありますrequest_id = 2である。

+1

これは私のバージョンよりも見栄えが良いです。しかし、従業員が複数のリクエストで表示されても、そこでは更新されませんか?これはそれを軽減するだろうか? 'UPDATE TBL_REQUESTS R1 SETのr1.statusは= (VW_STATUS S INNER JOIN TBL_REQUESTS R2 ONからs.status を選択s.employee_id = r2.employee_id WHERE rd2.request_id = 2) におけるr1.employee_id(選択WHERE s.employee_id FROM VW_STATUS s INNER JOIN TBL_REQUESTS r2 ON s.employee_id = r2.employee_id WHERE rd2.request_id = 2)およびr1.request_id = 2'編集 - 保存されたコメントの入力を認識しませんでした。 – MidnightThoughtful

+0

はい、もっともです。また、私の質問があなたの質問に答えるのを助けたら私の答えに正しいものを記してください。 –