MySQL 在插入位置后触发更新行

标签 mysql triggers sql-update

<分区>

我有 2 个表,RatingsRecipes

Ratings 上插入后,我需要找到评分食谱的所有评分的平均值,并更新 Recipes 中的 Rating_Avg 列表。

这行得通,但我相信它正在更新 Recipes.Rating_Avg 中的所有行,而我只需要更新其中 Recipe_No = 最近评级的 Recipe_No 的行。

CREATE TRIGGER `update_avg` AFTER INSERT ON `Ratings`
 FOR EACH ROW UPDATE Recipes
SET Rating_Avg = (SELECT AVG(Rating) from Ratings where Ratings.Recipe_No=Recipes.Recipe_No)

我觉得我需要添加一个 WHERE Recipe_No = NEW.Recipe_No 但我不确定在哪里添加它。

最佳答案

您确实在每次触发器触发时更新食谱中的所有行。使用 NEW.Recipe_No 伪列,您可以将更新限制为仅受影响的 Recipes 记录:

CREATE TRIGGER update_avg AFTER INSERT ON `Ratings`
FOR EACH ROW UPDATE Recipes
  SET Rating_Avg = (SELECT AVG(Rating) from Ratings where Ratings.Recipe_No=Recipes.Recipe_No)
WHERE Recipes.Recipe_No=NEW.Recipe_No

关于MySQL 在插入位置后触发更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15554235/

相关文章:

android - MariaDB & Android - 实现消息功能,分别选择用户及其消息

php - 排序/解析 MySQL 行字段中的异构 CSV 分隔文本值

更新触发器上的 Mysql 更新

javascript - 如何使用javascript同时触发回车键和按钮

SQL 子字符串 - 删除最后一个字符

javascript - 使用 AngularJS 更新复选框单击上的单个 MySQL 记录

mysql - 这个mysql索引中字段名后面的数字是什么意思?

sql - 确定表是否受到任何触发器的影响

MySQL 将前导数字添加到列中的现有 ID

mysql - SQL 查询按行号排序和更新(SQLFiddle 示例)