Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle sql MERGE INTO con una singola clausola where

Per questo esempio il tuo problema è sicuramente nella sottoquery USING. Questa query produce più di un valore di table2.column1 :

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

Quindi la clausola ON corrisponderà alle stesse righe in table1 più di una volta:

ON (table1.column3 = t2.column1 )

Oracle non riesce a capire quale valore di t2.column2 dovrebbe essere usato nell'AGGIORNAMENTO, quindi lancia ORA-30926 .

L'uso di distinto nella sottoquery non aiuta perché fornisce permutazioni di tutte le colonne. Devi scrivere una sottoquery che produca valori univoci di t2.column1 su tutte le righe o aggiungi un'altra o più colonne identificative per generare una chiave univoca che puoi unire a table1 .