sql >> Databáze >  >> RDS >> Oracle

Jak mohu vyřešit chybu ORA-01427 (jednořádkový poddotaz vrací více než jeden řádek)?

Chyba se zobrazuje, protože v db2.CENSUS existuje více než jeden řádek pro alespoň hodnotu uid . (Mohlo by jich být více.) Můžete zjistit, které hodnoty uid způsobují problém následujícím způsobem:

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

V tu chvíli můžete dělat řadu věcí. Můžete odstranit další řádky (možná jich není tolik a stejně je nechcete) a aktualizovat jako v původním dotazu, nebo můžete použít agregaci v poddotazu, který používáte k aktualizaci, např.:

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

Navíc s vaším dotazem, jak je uvedeno výše, pokud neexistuje odpovídající hodnota notes v db2.CENSUS pro nějakou hodnotu db1.CENSUS.uid , db1.CENSUS.notes bude nastaven na NULL . Možná je to chování, které chcete? Pokud ne, budete chtít něco jako následující:

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. Je zobrazení MySQL rychlejší než běžný dotaz?

  2. PHP nevidí rozšíření mysql

  3. Zabránění vkládání SQL v PHP pomocí MDB2

  4. Získání objektu Query místo výsledků pomocí funkce Async/await a npm-mysql