如何合并MySQL中的关联查询与更新查询以更新机构平均评分?
合并MySQL查询与更新语句的解决方案
嘿,我来帮你把这两个语句合并成一个高效的更新操作!咱们先明确需求:根据指定reviewId找到对应的机构,计算该机构所有评论的平均评分,然后把这个值更新到institutions表的averageRatings字段中。
方法一:使用UPDATE JOIN(推荐,性能更优)
这种方式通过子查询先获取目标机构的平均评分,再关联institutions表完成更新,只需要一次子查询计算,效率更高:
UPDATE institutions i JOIN ( -- 先获取reviewId='3'对应的机构ID,再计算该机构所有评论的平均评分 SELECT institudeId, AVG(averageRating) AS avg_rating FROM review WHERE institudeId = (SELECT institudeId FROM review WHERE reviewId = '3') ) r ON i.id = r.institudeId SET i.averageRatings = r.avg_rating;
方法二:使用关联子查询更新
如果你更习惯子查询的写法,也可以直接在SET子句中嵌套计算平均评分的逻辑,同时通过WHERE限定要更新的机构:
UPDATE institutions i SET averageRatings = ( -- 原查询逻辑:计算指定reviewId对应机构的平均评分 SELECT AVG(b.averageRating) FROM review a INNER JOIN review b ON b.institudeId = a.institudeId WHERE a.reviewId = '3' ) -- 限定只更新目标机构的记录 WHERE i.id = (SELECT institudeId FROM review WHERE reviewId = '3');
注意事项
- 你原来的更新语句里
a.institudeId是未定义的,因为别名a只在查询语句中有效,所以必须通过子查询先获取目标机构的ID,或者用关联的方式传递这个值。 - 如果
reviewId是数值类型,记得去掉引号'3',写成3即可。
内容的提问来源于stack exchange,提问作者kumar
相关产品推荐
相关产品推荐

