Получавате грешката, защото има повече от един ред в 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 );