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`)