Vous obtenez l'erreur car il existe plusieurs lignes dans db2.CENSUS
pour au moins la valeur de uid
. (Il pourrait y en avoir plus.) Vous pouvez déterminer quelles valeurs de uid
sont à l'origine du problème en procédant comme suit :
SELECT uid, COUNT(*)
FROM db2.census
GROUP BY uid
HAVING COUNT(*) > 1;
À ce stade, vous pouvez faire un certain nombre de choses. Vous pouvez supprimer les lignes supplémentaires (il n'y en a peut-être pas beaucoup et vous n'en voulez pas de toute façon) et les mettre à jour comme dans votre requête d'origine, ou vous pouvez utiliser l'agrégation dans la sous-requête que vous utilisez pour mettre à jour, par exemple :
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';
De plus, avec votre requête telle qu'elle est ci-dessus, s'il n'y a pas de valeur correspondante de notes
dans db2.CENSUS
pour une valeur de db1.CENSUS.uid
, db1.CENSUS.notes
sera défini sur NULL
. C'est peut-être le comportement que vous souhaitez ? Sinon, vous voudrez quelque chose comme ce qui suit :
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 );