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

Hvordan kan jeg løse en ORA-01427-fejl (enkelt-række-underforespørgsel returnerer mere end én række)?

Du får fejlen, fordi der findes mere end én række i db2.CENSUS for mindst værdien uid . (Der kunne være flere.) Du kan finde ud af, hvilke værdier af uid forårsager problemet ved at gøre følgende:

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

På det tidspunkt kan du gøre en række ting. Du kan slette de ekstra rækker (måske er der ikke så mange, og du vil ikke have dem alligevel) og opdatere som i din oprindelige forespørgsel, eller du kan bruge aggregering i den underforespørgsel, du bruger til at opdatere, f.eks.:

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

Derudover, med din forespørgsel, som den er ovenfor, hvis der ikke er en tilsvarende værdi af notes i db2.CENSUS for en værdi af db1.CENSUS.uid , db1.CENSUS.notes indstilles til NULL . Måske er det den adfærd, du ønsker? Hvis ikke, vil du have noget i stil med følgende:

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. Codeigniters insert_batch() med tusindvis af inserts har manglende poster

  2. kalder en Oracle-funktion, der laver en indsættelse/opdatering fra PHP?

  3. Sådan deaktiveres forberedt erklæring i heroku med postgres database

  4. se alle data for duplikerede rækker i Oracle