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)
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
Ja, würde es sicherlich. Auch, wenn meine Frage geholfen hat, Ihre Frage zu beantworten, bitte markieren Sie meine Antwort als die richtige. –