Sie erhalten den Fehler, weil mehr als eine Zeile in db2.CENSUS
vorhanden ist für mindestens den Wert uid
. (Es könnten noch mehr sein.) Sie können herausfinden, welche Werte uid
haben verursachen das Problem, indem Sie Folgendes tun:
SELECT uid, COUNT(*)
FROM db2.census
GROUP BY uid
HAVING COUNT(*) > 1;
An diesem Punkt können Sie eine Reihe von Dingen tun. Sie können die zusätzlichen Zeilen löschen (vielleicht sind es nicht so viele und Sie möchten sie sowieso nicht) und wie in Ihrer ursprünglichen Abfrage aktualisieren, oder Sie können die Aggregation in der Unterabfrage verwenden, die Sie zum Aktualisieren verwenden, z. P>
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';
Außerdem gilt bei Ihrer Abfrage wie oben, wenn es keinen entsprechenden Wert von notes
gibt in db2.CENSUS
für einen Wert von db1.CENSUS.uid
, db1.CENSUS.notes
wird auf NULL
gesetzt . Vielleicht ist das das gewünschte Verhalten? Wenn nicht, möchten Sie etwas wie das Folgende:
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 );