Oracle
 sql >> база данни >  >> RDS >> Oracle

Как мога да разреша грешка ORA-01427 (подзаявката с един ред връща повече от един ред)?

Получавате грешката, защото има повече от един ред в db2.CENSUS за поне стойност на uid . (Може да има повече.) Можете да разберете кои стойности на uid причиняват проблема, като правят следното:

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

В този момент можете да направите редица неща. Можете да изтриете допълнителните редове (може би не са толкова много и така или иначе не ги искате) и да актуализирате както в първоначалната си заявка или можете да използвате агрегиране в подзаявката, която използвате за актуализиране, напр.:

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

В допълнение, с вашата заявка по начина, по който е по-горе, ако няма съответстваща стойност на notes в db2.CENSUS за някаква стойност на db1.CENSUS.uid , db1.CENSUS.notes ще бъде зададено на NULL . Може би това е поведението, което искате? Ако не, ще искате нещо като следното:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли друг начин за създаване на ограничения по време на създаване на SQL таблица?

  2. Хибернация:как да извикам съхранена функция, връщаща varchar?

  3. Отстраняване на неизправности Грешка на Oracle Form Builder FRM-10044

  4. ORA-00942:таблица или изглед не съществуват ... мога ли да получа повече подробности?

  5. Как да изпълним процедура вътре в пакет в Oracle