利用子查询的 mysql 更新查询
尝试使用子查询作为 SET 子句的一部分来更新表时遇到了错误,语法被标记为不正确。具体问题可以归因于 UPDATE 语句中后续的 WHERE 子句。
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
问题的出现是因为外部更新语句上的 WHERE 过滤器在内部子查询之前执行。因此,子查询的结果不能用于过滤正在更新的表。此问题的常见解决方案是采用多表更新。
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
在这个修改后的查询中,使用多表更新,其中 Comparison 作为要更新的主表(别名为 C) 。我们在Competition和子查询(别名为A)之间执行内部联接,计算每个CompetitionId的NumberOfTeams。 WHERE 子句现在用于过滤联接结果,确保仅更新两个表中的匹配行。
[演示](http://www.sqlfiddle.com/#!2/a74f3/1 ) 获取更新后的查询。
以上是如何在 MySQL 中使用 SET 子句中的子查询更新表?的详细内容。更多信息请关注PHP中文网其他相关文章!