Hlavním problémem je, že vnitřní dotaz nemůže souviset s vaším where
klauzule na vnějším update
protože filtr kde se nejprve použije na aktualizovanou tabulku ještě před provedením vnitřního poddotazu. Typickým způsobem řešení takové situace je aktualizace více tabulek
.
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