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

Oracle - join di aggiornamento - tabella non conservata con chiave

Dovresti essere in grado di farlo con una sottoquery correlata

UPDATE tbl1 t1
   SET t1.b = (SELECT c
                 FROM tbl2 t2
                WHERE t1.id = t2.id
                  AND t1.a  = t2.a
                  AND t1.b  = t2.b
                  AND t2.d  = 'a')
 WHERE t1.a = 'foo'
   AND EXISTS( SELECT 1
                 FROM tbl2 t2
                WHERE t1.id = t2.id
                  AND t1.a  = t2.a
                  AND t1.b  = t2.b
                  AND t2.d  = 'a')

Il problema con UPDATE quello che hai scritto è che Oracle non può garantire che ci sia esattamente 1 tbl2.c valore che corrisponde a un singolo tbl1.b valore. Se sono presenti più righe in tbl2 per qualsiasi riga particolare in tbl1 , l'aggiornamento correlato genererà un errore che indica che una sottoquery a riga singola ha restituito più righe. In tal caso, dovresti aggiungere della logica alla sottoquery per specificare quale riga da tbl2 da utilizzare in tal caso.