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

Come posso risolvere un errore ORA-01427 (la sottoquery a riga singola restituisce più di una riga)?

Viene visualizzato l'errore perché esiste più di una riga in db2.CENSUS per almeno un valore di uid . (Potrebbero essercene di più.) Puoi capire quali valori di uid stanno causando il problema procedendo come segue:

SELECT uid, COUNT(*)
  FROM db2.census
 GROUP BY uid
HAVING COUNT(*) > 1;

A quel punto puoi fare un sacco di cose. Puoi eliminare le righe extra (forse non ce ne sono molte e comunque non le vuoi) e aggiornarle come nella tua query originale, oppure puoi usare l'aggregazione nella sottoquery che stai usando per aggiornare, ad esempio:

update db1.CENSUS set (notes)
=
(
        select MAX(notes)
        from db2.CENSUS cen
        where  db1.CENSUS.uid = cen.uid

)
where headcount_ind = 'Y' and capture_FY = '2015';

Inoltre, con la tua query come è sopra, se non c'è un valore corrispondente di notes in db2.CENSUS per un valore di db1.CENSUS.uid , db1.CENSUS.notes sarà impostato su NULL . Forse è questo il comportamento che vuoi? In caso contrario, vorrai qualcosa come il seguente:

UPDATE db1.census c1
   SET c1.notes = ( SELECT max(c2.notes)
                      FROM db2.census c2
                     WHERE c2.uid = c1.uid )
 WHERE c1.headcount_ind = 'Y'
   AND c1.capture_FY = '2015'
   AND EXISTS ( SELECT 1 FROM db2.census c2
                 WHERE c2.uid = c1.uid );