You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类Twitter分布式系统MySQL查询:获取指定用户的关注者名称

你的SQL语句问题分析与正确实现方案

首先得指出,你当前的SQL语句没法得到想要的结果——它只会返回你指定的那个用户自己的名字,而不是他的所有关注者的名字,问题出在关联逻辑上:

你的Follower表结构里,id应该是被关注者的ID(也就是你要查询的<some_id>),而followerId才是真正的关注者ID。但你用INNER JOIN User USING(id)的时候,是把Follower.id和User.id做关联,这相当于把被关注者的ID和用户表ID匹配,自然只能拿到被关注者自己的名字。

正确的SQL实现

这里提供两种清晰的写法,都能准确获取指定ID用户的所有关注者名称:

写法一:使用JOIN ... ON(推荐,语义最清晰)

SELECT u.name
FROM Follower f
INNER JOIN User u ON f.followerId = u.id
WHERE f.id = <some_id>;

写法二:使用子查询(适合逻辑简单的场景)

SELECT name
FROM User
WHERE id IN (
    SELECT followerId
    FROM Follower
    WHERE id = <some_id>
);

额外优化建议

  • 给Follower表的字段重命名:把id改成followed_id(被关注者ID),这样字段语义更明确,后续维护和写SQL时不容易搞混关联关系
  • 添加索引:给Follower表创建联合索引(id, followerId),这样查询时数据库可以直接通过索引定位数据,大幅提升查询效率
  • 如果需要处理「关注者已被删除但记录仍留在Follower表」的情况,可以把INNER JOIN改成LEFT JOIN,不过这种场景下你可能会得到NULL的name值,需要根据业务需求处理

内容的提问来源于stack exchange,提问作者K. Shores

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:10:53