Bạn đang gặp lỗi vì tồn tại nhiều hơn một hàng trong db2.CENSUS
cho giá trị ít nhất là uid
. (Có thể có nhiều hơn.) Bạn có thể tìm ra các giá trị của uid
đang gây ra sự cố bằng cách làm như sau:
SELECT uid, COUNT(*)
FROM db2.census
GROUP BY uid
HAVING COUNT(*) > 1;
Tại thời điểm đó, bạn có thể làm một số điều. Bạn có thể xóa các hàng bổ sung (có thể không có nhiều và bạn không muốn chúng) và cập nhật như trong truy vấn ban đầu của mình hoặc bạn có thể sử dụng tính năng tổng hợp trong truy vấn con mà bạn đang sử dụng để cập nhật, ví dụ :
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';
Ngoài ra, với truy vấn của bạn theo cách trên, nếu không có giá trị tương ứng của notes
trong db2.CENSUS
cho một số giá trị của db1.CENSUS.uid
, db1.CENSUS.notes
sẽ được đặt thành NULL
. Có lẽ đó là hành vi bạn muốn? Nếu không, bạn sẽ muốn một cái gì đó giống như sau:
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 );