Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle sql MERGE INTO avec une seule clause where

Pour cet exemple, votre problème est certainement dans la sous-requête USING. Cette requête produit plusieurs valeurs de table2.column1 :

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

Ainsi, la clause ON correspondra à la ou aux mêmes lignes dans table1 plus d'une fois :

ON (table1.column3 = t2.column1 )

Oracle ne peut pas déterminer quelle valeur de t2.column2 doit être utilisé dans la MISE À JOUR, donc il lance ORA-30926 .

L'utilisation de distinct dans la sous-requête n'aide pas car cela donne des permutations de toutes les colonnes. Vous devez écrire une sous-requête qui produira des valeurs uniques de t2.column1 sur toutes les lignes, ou ajoutez une ou plusieurs autres colonnes d'identification pour générer une clé unique que vous pouvez joindre à table1 .