开发者社区> 问答> 正文

从其他表更新数据库平均价值中的字段

UPDATE `users` u  
   SET u.`user_rating`= (SELECT avg(rating) 
                           FROM `rating` r 
                          WHERE (r.prof_id=u.id AND r.is_prof_send=0) 
                             OR (r.user_id=u.id AND r.is_prof_send=1))
                            AND u.id in(3)

您好,我需要使用第二个的平均值来更新第一个表中的评分。我添加了示例,每次均返回1作为平均值,但内部选择返回正确的值。它出什么问题了?

展开
收起
几许相思几点泪 2019-12-29 19:17:07 884 0
1 条回答
写回答
取消 提交回答
  • 对于UPDATE或DELETE语句,MySql不允许在子查询(如您的代码)中引用目标表。 您可以使用的是联接。 尝试这种方式(如果这是您要应用的逻辑):

    UPDATE `users` u  
     INNER JOIN (
                 SELECT u.id, avg(r.rating) avgrating
                   FROM `users` u INNER JOIN `rating` r 
                     ON (r.prof_id=u.id AND r.is_prof_send=0) 
                     OR (r.user_id=u.id AND r.is_prof_send=1)
                  WHERE u.id IN (3)
                  GROUP BY u.id
                 ) t ON t.id = u.id
       SET u.`user_rating`= t.avgrating
    
    2019-12-29 19:17:23
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载