Heim > Datenbank > MySQL-Tutorial > Warum bleibt meine Oracle UPDATE-Abfrage mit einem JOIN hängen und wie kann ich das Problem beheben?

Warum bleibt meine Oracle UPDATE-Abfrage mit einem JOIN hängen und wie kann ich das Problem beheben?

Barbara Streisand
Freigeben: 2024-12-31 15:30:11
Original
723 Leute haben es durchsucht

Why Does My Oracle UPDATE Query with a JOIN Hang, and How Can I Fix It?

Fehlerbehebung bei einer unbestimmten Update-Abfrage mit Join in Oracle

Beim Ausführen der folgenden UPDATE-Abfrage:

UPDATE table1 t1 SET (t1.col,t1.Output) = (
  SELECT t2.col, t3.Output + t2.col
  FROM tabl2 t3 
  LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key
  WHERE t2.col is not NULL);
Nach dem Login kopieren

Benutzer Es kann zu einem unbestimmten Ausführungsfehler kommen. Dieser Artikel geht auf das Problem ein und bietet eine Lösung.

Das Problem: Nicht eindeutige Unterabfrageergebnisse

Die Hauptursache des Fehlers liegt in der Unterabfrage innerhalb des UPDATE Stellungnahme. Sofern die Unterabfrage nicht für jede Zeile in Tabelle 1 eine einzelne Zeile zurückgibt, schlägt der Aktualisierungsvorgang fehl. Der LEFT JOIN in der Unterabfrage ermöglicht mehrere übereinstimmende Zeilen, was möglicherweise zu einer nicht deterministischen Aktualisierung führt.

Lösung: Sicherstellen, dass die Unterabfrage eine einzelne Zeile zurückgibt

Um das zu beheben Bei diesem Problem ist eine Bedingung erforderlich, um Zeilen in Tabelle 1 mit Zeilen in der Unterabfrage in Beziehung zu setzen und so sicherzustellen, dass die Unterabfrage eine einzelne Zeile zurückgibt. Dies kann durch Hinzufügen einer Join-Bedingung erreicht werden, die Zeilen anhand eines eindeutigen Schlüssels abgleicht:

UPDATE table1 t1 SET (t1.col,t1.Output) = (
  SELECT t2.col, t3.Output + t2.col
  FROM tabl2 t3 
  LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key
  WHERE t2.col is not NULL
    AND t1.some_key = t2.some_key);
Nach dem Login kopieren

Adressierungsumfang des Updates

Eine weitere Überlegung ist die Tatsache, dass die Die UPDATE-Anweisung kann sich auf alle Zeilen in Tabelle 1 auswirken. Es ist wichtig zu beurteilen, ob dies das beabsichtigte Verhalten ist oder ob eine selektivere Aktualisierung erforderlich ist. Durch die Aufnahme zusätzlicher WHERE-Bedingungen in die UPDATE-Anweisung können Benutzer den Umfang der Aktualisierung nach Bedarf auf bestimmte Zeilen beschränken.

Das obige ist der detaillierte Inhalt vonWarum bleibt meine Oracle UPDATE-Abfrage mit einem JOIN hängen und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage