sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo puedo resolver un error ORA-01427 (la subconsulta de una sola fila devuelve más de una fila)?

Está recibiendo el error porque existe más de una fila en db2.CENSUS por al menos el valor de uid . (Podría haber más). Puede averiguar qué valores de uid están causando el problema al hacer lo siguiente:

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

En ese momento puedes hacer varias cosas. Puede eliminar las filas adicionales (tal vez no haya tantas y no las quiera de todos modos) y actualizar como en su consulta original, o puede usar la agregación en la subconsulta que está usando para actualizar, por ejemplo:

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';

Además, con su consulta como está arriba, si no hay un valor correspondiente de notes en db2.CENSUS para algún valor de db1.CENSUS.uid , db1.CENSUS.notes se establecerá en NULL . ¿Quizás ese es el comportamiento que quieres? Si no, querrá algo como lo siguiente:

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 );