Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle sql MERGE INTO com uma única cláusula where


Para este exemplo, seu problema está definitivamente na subconsulta USING. Esta consulta produz mais de um valor 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

Portanto, a cláusula ON corresponderá à(s) mesma(s) linha(s) em table1 mais de uma vez:
ON (table1.column3 = t2.column1 )

O Oracle não consegue descobrir qual valor de t2.column2 deve ser usado no UPDATE, então lança ORA-30926 .

Usar distinct na subconsulta não ajuda porque dá permutações de todas as colunas. Você precisa escrever uma subconsulta que produzirá valores exclusivos de t2.column1 em todas as linhas ou adicione outra(s) coluna(s) de identificação para gerar uma chave exclusiva que você pode juntar a table1 .