MySQL技术需求:用post表数据更新thread表lastpid与lastuid字段
解决方案
这就给你搞定这个更新需求,直接用关联更新结合子查询就能实现,具体MySQL语句如下:
UPDATE thread t INNER JOIN ( -- 先匹配每个tid的最新帖子,拿到对应的pid和uid SELECT p.tid, p.pid, p.uid FROM post p INNER JOIN ( -- 分组获取每个tid下的最大pid(也就是最新帖子的pid) SELECT tid, MAX(pid) AS max_pid FROM post GROUP BY tid ) max_posts ON p.tid = max_posts.tid AND p.pid = max_posts.max_pid ) latest_posts ON t.tid = latest_posts.tid SET t.lastpid = latest_posts.pid, t.lastuid = latest_posts.uid;
逻辑拆解
- 最内层子查询:
SELECT tid, MAX(pid) AS max_pid FROM post GROUP BY tid
按tid分组,找出每个主题下pid最大的帖子——一般pid是自增主键,所以最大pid就对应该主题的最新帖子。 - 中间关联层:把上面的结果和
post表关联,通过tid和max_pid精准匹配,拿到这条最新帖子对应的uid。 - 最终更新:将
thread表和整理好的最新帖子数据按tid关联,批量更新lastpid和lastuid字段。
如果你的post表中pid是全局唯一的自增主键,这个语句可以确保每个tid只匹配到一条最新记录,不会出现更新异常。
内容的提问来源于stack exchange,提问作者skiy
相关产品推荐
相关产品推荐

