Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle SQL MERGE INTO mit einer einzigen Where-Klausel

Für dieses Beispiel liegt Ihr Problem definitiv in der Unterabfrage USING. Diese Abfrage erzeugt mehr als einen Wert von table2.column1 :

SELECT DISTINCT table2.column1, 
        view1.column2
 FROM SCHEMA2.TABLE_2 table2
 LEFT JOIN SCHEMA2.VIEW_1 view1
 ON table2.column2 = view1.column3

Die ON-Klausel stimmt also mit denselben Zeilen in table1 überein mehr als einmal:

ON (table1.column3 = t2.column1 )

Oracle kann nicht herausfinden, welcher Wert von t2.column2 ist sollte im UPDATE verwendet werden, also schleudert es ORA-30926 .

Die Verwendung von „distinct“ in der Unterabfrage hilft nicht, da dies Permutationen aller Spalten ergibt. Sie müssen eine Unterabfrage schreiben, die eindeutige Werte von t2.column1 erzeugt über alle Zeilen oder fügen Sie weitere identifizierende Spalte(n) hinzu, um einen eindeutigen Schlüssel zu generieren, den Sie mit table1 verknüpfen können .