감사합니다, 나는 내부 조인과 UPDATE의 생각을하지 않았다.
원래 쿼리에서 값을 반환해야하므로 별칭을 지정할 수없는 하위 쿼리의 이름을 잘못 지정했습니다.
UPDATE Competition
SET Competition.NumberOfTeams =
(SELECT count(*) -- no column alias
FROM PicksPoints
WHERE UserCompetitionID is not NULL
-- put the join condition INSIDE the subquery :
AND CompetitionID = Competition.CompetitionID
group by CompetitionID
) -- no table alias
은 대회의 모든 기록에 대해 속임수를 써야합니다.
이 발견 될하려면
효과는 정확히없이 해당 PickPoints와 경쟁 레코드를 업데이트하지 않습니다 mellamokb에 의해 제안 된 쿼리와 동일하지 않습니다. SELECT id, COUNT(*) GROUP BY id
이후
은 레코드가 선택하지 않은 경우 SELECT COUNT(*)
반면
항상 0이되고, 값을 반환되며, ID의 기존 값 계산한다.
이것은 문제 일 수도 있고 아닐 수도 있습니다. mellamokb 쿼리의
0 인식 버전은 다음과 같습니다 해당하는 PickPoints이 발견되지 않은 경우 즉
Update Competition as C
LEFT 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 = IFNULL(A.NumberOfTeams, 0)
, 설정 Competition.NumberOfTeams 제로로. 참을성를 들어
대단히 고마워, 그 속임수를했습니다 :) 물론, 환호를 감사합니다! – user1542043
설명이 정말 좋은 대답이되었습니다. –