MySQL-基于来自多个表的SELECT的UPDATE查询

时间:2018-06-20 10:29:22

标签: mysql

请帮助我。 我有3张桌子:

用户 id评级

帖子 id_post评级id_author

照片 id_photo评级id_user

需要根据以下公式查询更新用户的评分:avg(用户发布的评分)+ avg(用户照片评分)。 尝试过此操作,但仅在用户拥有以及帖子和照片时才有效。如果用户有照片,但没有帖子,则评分变为0:

UPDATE users U
                inner JOIN
                 (select id_user, avg(rating) as avgrating
                    from photos P
                    group by id_user
                 ) P
                 on U.id = P.id_user
               inner JOIN
                 (select author_id, avg(rating) as avgrating_posts
                  from posts PS
                    group by author_id
                 ) PS
                 on U.id = PS.author_id
                SET
        U.rating = (
                                            P.avgrating +
                                            PS.avgrating_posts 
                                         )



UPDATE users SET
        rating = (
            ( SELECT AVG(rating) FROM photos
                        WHERE photos.id_user = users.id AND deleted = 0 AND hidden = 0 AND date_published > 0 ) +
            ( SELECT AVG(rating) FROM posts
                        WHERE posts.author_id = users.id AND published_at > 0

))

1 个答案:

答案 0 :(得分:0)

对内部查询使用left连接,因此,如果找不到与用户相关的记录,则将返回空值。

UPDATE users U 
       LEFT JOIN (SELECT author_id, 
                          AVG(rating) AS avgrating_posts 
                   FROM   posts PS 
                   GROUP  BY author_id) PS 
               ON U.id = PS.author_id 
       LEFT JOIN (SELECT id_user, 
                          AVG(rating) AS avgrating 
                   FROM   photos P 
                   GROUP  BY id_user) P 
               ON U.id = P.id_user 
SET    U.rating =  COALESCE(P.avgrating,0) + COALESCE(PS.avgrating_posts,0)