Otrzymujesz błąd, ponieważ istnieje więcej niż jeden wiersz w db2.CENSUS
dla co najmniej wartości uid
. (Może być więcej.) Możesz dowiedzieć się, które wartości uid
powodują problem, wykonując następujące czynności:
SELECT uid, COUNT(*)
FROM db2.census
GROUP BY uid
HAVING COUNT(*) > 1;
W tym momencie możesz zrobić wiele rzeczy. Możesz usunąć dodatkowe wiersze (może jest ich niewiele, a i tak ich nie chcesz) i zaktualizować tak, jak w pierwotnym zapytaniu, lub możesz użyć agregacji w podzapytaniu, którego używasz do aktualizacji, np.:
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';
Ponadto w zapytaniu tak, jak powyżej, jeśli nie ma odpowiadającej wartości notes
w db2.CENSUS
dla pewnej wartości db1.CENSUS.uid
, db1.CENSUS.notes
zostanie ustawiony na NULL
. Może takiego zachowania chcesz? Jeśli nie, będziesz potrzebować czegoś takiego:
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 );