2016-04-07 12 views
0

Ich kann die folgende Oracle-korrelierte Abfrage nicht abrufen, um Aktualisierungen nur für einen Unterabschnitt von Datensätzen durchzuführen. Derzeit werden alle Datensätze aktualisiert.Korrelierte Aktualisierungsabfrage

Ich habe eine Tabelle (TBL_REQUESTS), die wie folgt aussieht:

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

ich einen Blick haben (VW_STATUS), die wie folgt aussieht:

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

ich eine Update-Anweisung zu schreiben versuche, das wäre Aktualisieren Sie das Statusfeld von Mitarbeitern in TBL_REQUESTS mit dem entsprechenden Status von VW_STATUS, wobei TBL_REQUESTS.request_id einem übergebenen Wert entspricht. Eine zusätzliche Falte ist, dass es mehr als 1 Datensatz pro Mitarbeiter in VW_STATUS geben kann, aber wenn das ein Problem darstellt, kann ich immer nach einer Möglichkeit suchen, das in der VIEW zu beheben.

Dieser jede Zeile in TBL_REQUESTS aktualisiert Versuch:

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) 

Antwort

1

Ich denke, eine bessere Möglichkeit, diese Abfrage zu schreiben, könnte dies sein -

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) 

Diese die Abfrage beschränken sollten nur auf employee_ids ausführen zu können, habe request_id = 2.

+1

Das sieht besser aus als meine Version - aber, wenn der Mitarbeiter in mehr als einer Anfrage erscheint, würde es sie dort auch nicht aktualisieren? Würde das das lindern? 'UPDATE TBL_REQUESTS r1 SET r1.status = (SELECT FROM s.status 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 INNERER JOIN TBL_REQUESTS r2 ON s.employee_id = r2.employee_id WHERE rd2.request_id = 2) und r1.request_id = 2' edit - konnte keine gespeicherten Kommentare eingeben. – MidnightThoughtful

+0

Ja, würde es sicherlich. Auch, wenn meine Frage geholfen hat, Ihre Frage zu beantworten, bitte markieren Sie meine Antwort als die richtige. –

Verwandte Themen