在 MySQL 中更新数据时,通常需要使用子查询引用其他表中的值。但是,当子查询与外部更新语句没有正确关联时,可能会发生错误。
考虑以下查询:
Update Competition Set Competition.NumberOfTeams = ( SELECT count(*) as NumberOfTeams FROM PicksPoints where UserCompetitionID is not NULL group by CompetitionID ) a where a.CompetitionID = Competition.CompetitionID
此查询失败并显示错误消息:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a where a.CompetitionID = Competition.CompetitionID' at line 8
出现错误是因为内部子查询与外部更新语句上的 where 子句不相关。在执行子查询之前,where 条件适用于目标表(Competition)。为了解决这个问题,可以采用多表更新:
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
这个多表更新正确地将竞争表(别名为C)与子查询(别名为A)连接起来,确保子查询的值可用于在外部更新语句中进行过滤。
有关更正查询的现场演示,请参阅以下 SQL Fiddle:http://www.sqlfiddle.com/#!2/a74f3/ 1
以上是如何在MySQL更新语句中正确使用子查询以避免语法错误?的详细内容。更多信息请关注PHP中文网其他相关文章!