Mysql,如何将下面的查询更改为fech表的每一行?

Mysql,如何将下面的查询更改为fech表的每一行?,mysql,sql,Mysql,Sql,我每天都有一件事发生。我有两张桌子: 应用 评级 基本上,每个应用程序都有一个avg_分数,该分数由存储在字段分数表rating中的用户给出的所有反馈的平均值给出。我编写了一个事件,每天刷新一次此值: CREATE EVENT MY_DAILY_UPDATE ON SCHEDULE EVERY 1 DAY STARTS '2011-07-23 23:30:00' DO UPDATE application SET `avg_score`= (SELECT AVG(`score

我每天都有一件事发生。我有两张桌子:

  • 应用
  • 评级
基本上,每个应用程序都有一个
avg_分数
,该分数由存储在字段分数表rating中的用户给出的所有反馈的平均值给出。我编写了一个事件,每天刷新一次此值:

CREATE EVENT MY_DAILY_UPDATE
ON SCHEDULE EVERY 1 DAY STARTS '2011-07-23 23:30:00'
DO

  UPDATE application
     SET `avg_score`= (SELECT AVG(`score`) as new_score
                         FROM `rating`
                        WHERE `ID_APPLICATION` = 1)      
   WHERE `APPLICATION_ID` = 1
它可以工作,但只适用于ID=1的应用程序,因为它是我自己编写的。 相反,我需要查询来更新表应用程序中每个应用程序的字段avg_分数


所以我想我需要用一个变量ID来改变值1(例如,
APPLICATION\u ID
=ID\u variable)…这个变量应该取应用程序表中每个应用程序的ID值(1,2,3…..4等等)……但我不知道如何更改我的查询……

更改子查询以引用外部查询中的值。(这使其成为相关子查询。)

或者,当您对“所有值”执行此操作时,只需在子查询中加入

UPDATE
  application
INNER JOIN
(
  SELECT ID_APPLICATION, AVG(score) AS score FROM rating GROUP BY ID_APPLICATION
)
  AS averages
    ON averages.ID_APPLICAITON = application.APPLICATION_ID
SET
  application.avg_score = averages.score

Tnx它们都很有用……你能解释一下它们之间的区别吗(第二个比较难理解,因为我是sql初学者)?第一个看起来更简单,第二个更快……您建议使用哪一个?第一个将子查询有效地用作标量函数,并将其应用于源表/查询中的每一行;给定一个应用程序ID,平均分数是多少?第二个使用子查询作为内联视图,获取每个ID_应用程序的平均值(分数),将其与应用程序表联接,然后根据联接结果运行更新。我倾向于使用速度更快的东西,并找到一种使其可读/可维护的方法。只有当性能相似时,我才会选择较低的性能以获得可读性。
UPDATE
  application
INNER JOIN
(
  SELECT ID_APPLICATION, AVG(score) AS score FROM rating GROUP BY ID_APPLICATION
)
  AS averages
    ON averages.ID_APPLICAITON = application.APPLICATION_ID
SET
  application.avg_score = averages.score
UPDATE application
SET `avg_score`= 
    (SELECT AVG(`score`) as new_score
     FROM `rating`
     WHERE `ID_APPLICATION` = `application.APPLICATION_ID`)