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

Como posso resolver um erro ORA-01427 (subconsulta de linha única retorna mais de uma linha)?


Você está recebendo o erro porque existe mais de uma linha em db2.CENSUS para pelo menos o valor de uid . (Pode haver mais.) Você pode descobrir quais valores de uid estão causando o problema fazendo o seguinte:
SELECT uid, COUNT(*)
  FROM db2.census
 GROUP BY uid
HAVING COUNT(*) > 1;

Nesse ponto você pode fazer uma série de coisas. Você pode excluir as linhas extras (talvez não haja muitas e você não as queira de qualquer maneira) e atualizar como em sua consulta original ou pode usar agregação na subconsulta que está usando para atualizar, por exemplo:
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';

Além disso, com sua consulta do jeito que está acima, se não houver um valor correspondente de notes em db2.CENSUS para algum valor de db1.CENSUS.uid , db1.CENSUS.notes será definido como NULL . Talvez seja esse o comportamento que você quer? Se não, você vai querer algo como o seguinte:
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 );