Você está recebendo o erro porque existe mais de uma linha em
db2.CENSUS
para pelo menos o valor de uid
. (Pode haver mais.) Você pode descobrir quais valores de uid
estão causando o problema fazendo o seguinte:SELECT uid, COUNT(*)
FROM db2.census
GROUP BY uid
HAVING COUNT(*) > 1;
Nesse ponto você pode fazer uma série de coisas. Você pode excluir as linhas extras (talvez não haja muitas e você não as queira de qualquer maneira) e atualizar como em sua consulta original ou pode usar agregação na subconsulta que está usando para atualizar, por exemplo:
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';
Além disso, com sua consulta do jeito que está acima, se não houver um valor correspondente de
notes
em db2.CENSUS
para algum valor de db1.CENSUS.uid
, db1.CENSUS.notes
será definido como NULL
. Talvez seja esse o comportamento que você quer? Se não, você vai querer algo como o seguinte: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 );