首页  >  文章  >  数据库  >  如何在 MySQL 中使用 SET 子句中的子查询更新表?

如何在 MySQL 中使用 SET 子句中的子查询更新表?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-27 02:41:03227浏览

How to Update a Table with a Subquery in the SET Clause in MySQL?

利用子查询的 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn