谢谢,我不知道使用INNER JOIN进行更新。
在原始查询中,错误是要命名子查询,该子查询必须返回一个值,因此不能使用别名。
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
应该为比赛的每条记录做好准备。
要注意的是:
其效果与mellamokb提出的查询不完全相同,后者不会在没有相应PickPoints的情况下更新竞赛记录。
由于SELECT COUNT(*)仅会计算ID的现有值,
而SELECT COUNT(*)将始终返回一个值,如果未选择任何记录,则返回0。
这可能对您来说是一个问题,也可能不是。
意识为0的mellamokb查询版本为:
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)
换句话说,如果找不到对应的PickPoints,请将Competition.NumberOfTeams设置为零。