Heim >Datenbank >MySQL-Tutorial >Wie behebe ich eine Oracle UPDATE-Abfrage mit JOIN, die auf unbestimmte Zeit ausgeführt wird?

Wie behebe ich eine Oracle UPDATE-Abfrage mit JOIN, die auf unbestimmte Zeit ausgeführt wird?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-24 12:34:291050Durchsuche

How to Fix an Oracle UPDATE Query with JOIN That Runs Indefinitely?

Oracle-Update-Abfrage mit Join

Betrachten Sie die folgende Oracle-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);

Problem:

Die Abfrage wird aufgrund einer fehlenden Bedingung auf unbestimmte Zeit ausgeführt Stellen Sie sicher, dass die Unterabfrage für jede aktualisierte Zeile in t1 eine einzelne Zeile zurückgibt.

Lösung:

Um das Problem zu beheben, muss der Unterabfrage eine Bedingung hinzugefügt werden, um das zu korrelieren Zeilen in t1 mit denen in der Unterabfrage. Beispielsweise könnte die folgende Bedingung verwendet werden:

AND t1.some_key = t2.some_key

Die resultierende aktualisierte Abfrage würde so aussehen:

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);

Zusätzliche Überlegungen:

  • Die obige Änderung stellt sicher, dass die Unterabfrage eine einzelne Zeile für jede t1-Zeile zurückgibt, die den hinzugefügten Anforderungen entspricht Bedingung.
  • Wenn nicht beabsichtigt ist, jede Zeile in t1 zu aktualisieren, könnte der Haupt-UPDATE-Anweisung eine zusätzliche WHERE-Klausel hinzugefügt werden, um die zu aktualisierenden Zeilen anzugeben.

Das obige ist der detaillierte Inhalt vonWie behebe ich eine Oracle UPDATE-Abfrage mit JOIN, die auf unbestimmte Zeit ausgeführt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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