Heim > Datenbank > MySQL-Tutorial > Wie aktualisiere ich Tabellen mit inneren Verknüpfungen in Oracle, um ORA-00933 zu vermeiden?

Wie aktualisiere ich Tabellen mit inneren Verknüpfungen in Oracle, um ORA-00933 zu vermeiden?

Barbara Streisand
Freigeben: 2025-01-25 04:51:09
Original
872 Leute haben es durchsucht

How to Correctly Update Tables with Inner Joins in Oracle to Avoid ORA-00933?

Oracle Update mit innerem Join: Vermeiden von ORA-00933

Bei der Aktualisierung von Orakeltabellen mit einem inneren Join ist ORA-00933: "SQL-Befehl nicht ordnungsgemäß beendet." Dies ergibt sich aus der Verwendung einer falschen Syntax. Die Standard UPDATE ... INNER JOIN ... SET ... -Syntax, die in anderen Datenbanken wie MySQL verwendet wird, funktioniert nicht direkt in Oracle.

Das Problem und die Lösung von Oracle

Die problematische Syntax sieht so aus:

<code class="language-sql">UPDATE table1
INNER JOIN table2 ON table1.value = table2.DESC
SET table1.value = table2.CODE
WHERE table1.UPDATETYPE='blah';</code>
Nach dem Login kopieren

Oracle erfordert einen anderen Ansatz. Hier ist die richtige Methode:

<code class="language-sql">UPDATE table1 SET table1.value = (SELECT table2.CODE
                                  FROM table2 
                                  WHERE table1.value = table2.DESC)
WHERE table1.UPDATETYPE='blah'
AND EXISTS (SELECT table2.CODE
            FROM table2 
            WHERE table1.value = table2.DESC);</code>
Nach dem Login kopieren

Hierbei wird eine Unterabfrage verwendet, um den Wert table2.CODE für das Update und eine EXISTS -Klausel zu erhalten, um sicherzustellen, dass das Update nur dann stattfindet, wenn eine passende Zeile in table2 vorhanden ist. Dies verhindert Fehler, die durch den Versuch verursacht werden, mit nicht existierenden Werten zu aktualisieren.

Eine alternative Methode: Inline -Ansichten

Eine andere Option besteht darin, eine Inline -Ansicht zu verwenden:

<code class="language-sql">UPDATE 
(SELECT table1.value as OLD, table2.CODE as NEW
 FROM table1
 INNER JOIN table2
 ON table1.value = table2.DESC
 WHERE table1.UPDATETYPE='blah'
) t
SET t.OLD = t.NEW;</code>
Nach dem Login kopieren

Der Erfolg dieser Methode hängt davon ab, ob Oracle die Inline -Ansichts -Aktualisierung berücksichtigt, die durch bestimmte Datenbankregeln bestimmt wird. Die vorherige Methode ist im Allgemeinen zuverlässiger. Wählen Sie die Methode, die Ihren Anforderungen am besten entspricht, und testen Sie immer gründlich.

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich Tabellen mit inneren Verknüpfungen in Oracle, um ORA-00933 zu vermeiden?. 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