sql >> Database >  >> RDS >> Oracle

Hoe kan ik een ORA-01427-fout oplossen (subquery met één rij retourneert meer dan één rij)?

U krijgt de foutmelding omdat er meer dan één rij bestaat in db2.CENSUS voor ten minste een waarde van uid . (Er kunnen er meer zijn.) U kunt uitzoeken welke waarden van uid veroorzaken het probleem door het volgende te doen:

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

Op dat moment kun je een aantal dingen doen. U kunt de extra rijen verwijderen (misschien zijn er niet zoveel en u wilt ze toch niet) en bijwerken zoals in uw oorspronkelijke zoekopdracht, of u kunt aggregatie gebruiken in de subquery die u gebruikt om bij te werken, bijvoorbeeld:

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

Bovendien, met uw vraag zoals hierboven, als er geen corresponderende waarde van notes is in db2.CENSUS voor een waarde van db1.CENSUS.uid , db1.CENSUS.notes wordt ingesteld op NULL . Misschien is dat het gedrag dat je wilt? Zo niet, dan wil je zoiets als het volgende:

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. De achtergrondkleur van een formulierheader wijzigen in Access 2016

  2. ClassNotFoundException:oracle.jdbc.OracleDriver

  3. MySQL Alter Table Veld toevoegen voor of na een veld dat al aanwezig is

  4. mysql dupliceert met LOAD DATA INFILE