sql >> Databasteknik >  >> RDS >> Oracle

Hur kan jag lösa ett ORA-01427-fel (enrad underfråga returnerar mer än en rad)?

Du får felet eftersom det finns mer än en rad i db2.CENSUS för minst värdet uid . (Det kan finnas fler.) Du kan ta reda på vilka värden för uid orsakar problemet genom att göra följande:

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

Då kan du göra ett antal saker. Du kan ta bort de extra raderna (det kanske inte finns så många och du vill inte ha dem ändå) och uppdatera som i din ursprungliga fråga, eller så kan du använda aggregering i underfrågan du använder för att uppdatera, t.ex.:

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

Dessutom, med din fråga som den är ovan, om det inte finns ett motsvarande värde för notes i db2.CENSUS för något värde på db1.CENSUS.uid , db1.CENSUS.notes kommer att ställas in på NULL . Kanske är det beteendet du vill ha? Om inte, vill du ha något i stil med följande:

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


  1. Tips för att övervaka MySQL för Moodle

  2. MySQL SELECT endast inte null-värden

  3. Resurs-id #5:MySQL

  4. MySQL-data till JSON via PHP