Il problema principale è che la query interna non può essere correlata al tuo where
clausola sull'update
esterno istruzione, perché il filtro where si applica prima alla tabella che viene aggiornata prima ancora che venga eseguita la sottoquery interna. Il modo tipico per gestire una situazione come questa è un aggiornamento multi-tabella
.
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