U krijgt de foutmelding omdat er meer dan één rij bestaat in db2.CENSUS
voor ten minste een waarde van uid
. (Er kunnen er meer zijn.) U kunt uitzoeken welke waarden van uid
veroorzaken het probleem door het volgende te doen:
SELECT uid, COUNT(*)
FROM db2.census
GROUP BY uid
HAVING COUNT(*) > 1;
Op dat moment kun je een aantal dingen doen. U kunt de extra rijen verwijderen (misschien zijn er niet zoveel en u wilt ze toch niet) en bijwerken zoals in uw oorspronkelijke zoekopdracht, of u kunt aggregatie gebruiken in de subquery die u gebruikt om bij te werken, bijvoorbeeld:
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';
Bovendien, met uw vraag zoals hierboven, als er geen corresponderende waarde van notes
is in db2.CENSUS
voor een waarde van db1.CENSUS.uid
, db1.CENSUS.notes
wordt ingesteld op NULL
. Misschien is dat het gedrag dat je wilt? Zo niet, dan wil je zoiets als het volgende:
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 );