Vấn đề chính là truy vấn bên trong không thể liên quan đến where
của bạn mệnh đề trên update
bên ngoài vì bộ lọc where áp dụng đầu tiên cho bảng đang được cập nhật trước khi truy vấn con bên trong thậm chí thực thi. Cách điển hình để xử lý tình huống như thế này là cập nhật nhiều bảng
.
Update
Competition as C
inner join (
select CompetitionId, count(*) as NumberOfTeams
from PicksPoints as p
where UserCompetitionID is not NULL
group by CompetitionID
) as A on C.CompetitionID = A.CompetitionID
set C.NumberOfTeams = A.NumberOfTeams
Demo: http://www.sqlfiddle.com/#!2/a74f3/1