Du får felet eftersom det finns mer än en rad i db2.CENSUS
för minst värdet uid
. (Det kan finnas fler.) Du kan ta reda på vilka värden för uid
orsakar problemet genom att göra följande:
SELECT uid, COUNT(*)
FROM db2.census
GROUP BY uid
HAVING COUNT(*) > 1;
Då kan du göra ett antal saker. Du kan ta bort de extra raderna (det kanske inte finns så många och du vill inte ha dem ändå) och uppdatera som i din ursprungliga fråga, eller så kan du använda aggregering i underfrågan du använder för att uppdatera, t.ex.:
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';
Dessutom, med din fråga som den är ovan, om det inte finns ett motsvarande värde för notes
i db2.CENSUS
för något värde på db1.CENSUS.uid
, db1.CENSUS.notes
kommer att ställas in på NULL
. Kanske är det beteendet du vill ha? Om inte, vill du ha något i stil med följande:
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 );