如何使用表B中的记录计数更新表A中的分数列?
问题描述:
我有一个posts
表和一个likes
表。许多用户可以喜欢帖子。 posts
表具有非规范化的likesScore
列,表示邮政拥有的likes
的数量。我想通过在likes
表@postId
上执行COUNT(*)
来更新posts.likesScore
表。如何使用表B中的记录计数更新表A中的分数列?
我对如何做到这一点的想法,但我不能得到正确的语法:
UPDATE posts
SET likesScore = ...
WHERE posts.id = @postId
答
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都有数据与数据不同步的风险很大。
答
UPDATE posts
SET likesScore = (SELECT count(*) FROM likes WHERE likes.id=posts.id)
WHERE ...
@OMG小马,非常感谢。我可以问你在子查询中使用“group by”吗?我不能只使用“where postId = @postId”?此外,你说使用连接,但我看不到在该查询中的连接,或至少关键词“加入”...我错过了什么? – Mohamad 2011-01-27 16:51:03