谢谢,我没有与INNER JOIN的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
应该为每个竞争记录做窍门。
要注意:
的效果是不完全一样的mellamokb提出的查询,它不会与没有相应PickPoints更新比赛的记录。
由于SELECT id, COUNT(*) GROUP BY id
只会计数ID的现有价值,
而SELECT COUNT(*)
总是会返回一个值,为0如果没有选择记录。
这可能会或可能不会成为您的问题。 mellamokb查询
0识别版本是:
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为零。
非常感谢你,这个技巧:)赞赏解释,欢呼! – user1542043 2012-07-21 01:29:04
解释说这是一个非常好的答案。 – 2013-11-14 16:11:52