如何使用表B中的记录计数更新表A中的分数列?

时间:2011-01-27 16:30:14

标签: mysql sql sql-update

我有一个posts表和一个likes表。很多用户都喜欢上帖。 posts表格具有非规范化likesScore列,表示帖子的likes个数。我想在posts.likesScoreCOUNT(*)上执行likes更新@postId表。

我知道如何做到这一点,但我无法正确理解语法:

UPDATE posts
SET likesScore = ...
WHERE posts.id = @postId

2 个答案:

答案 0 :(得分:2)

MySQL UPDATE statements support JOINs - 使用:

UPDATE POSTS p 
       JOIN (SELECT t.postid,
                    COUNT(*) AS cnt
               FROM LIKES t
           GROUP BY t.postid) l ON l.postid = p.postid
   SET likesscore = l.cnt

标准方法是使用子查询,但这需要在WHERE子句中的子查询过滤中进行关联 - 否则存在更新支持表中没有引用的记录的风险

我不希望使用视图将计数存储在表中,因为每次在这种情况下生成LIKE时,计数与数据不同步的风险很大。

答案 1 :(得分:1)

UPDATE posts
SET likesScore = (SELECT count(*) FROM likes WHERE likes.id=posts.id)
WHERE ...