Du får fejlen, fordi der findes mere end én række i db2.CENSUS
for mindst værdien uid
. (Der kunne være flere.) Du kan finde ud af, hvilke værdier af uid
forårsager problemet ved at gøre følgende:
SELECT uid, COUNT(*)
FROM db2.census
GROUP BY uid
HAVING COUNT(*) > 1;
På det tidspunkt kan du gøre en række ting. Du kan slette de ekstra rækker (måske er der ikke så mange, og du vil ikke have dem alligevel) og opdatere som i din oprindelige forespørgsel, eller du kan bruge aggregering i den underforespørgsel, du bruger til at opdatere, f.eks.:
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';
Derudover, med din forespørgsel, som den er ovenfor, hvis der ikke er en tilsvarende værdi af notes
i db2.CENSUS
for en værdi af db1.CENSUS.uid
, db1.CENSUS.notes
indstilles til NULL
. Måske er det den adfærd, du ønsker? Hvis ikke, vil du have noget i stil med følgende:
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 );