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