如何编写MySQL好友关系SQL?获取用户已确认好友列表
当然可行!
首先咱们得明确已确认好友的判定逻辑:两个人互为好友,意味着在friends表中同时存在两条记录——A添加B为好友,且B也添加A为好友。
不过先提个小细节:你给出的friends表中,John(users.id=1)和Jerry(users.id=2)的对应数据写的是(1,2) (2,2),这里第二条记录的friendid=2是Jerry加自己,这显然不符合实际的好友确认逻辑,应该是笔误,正确的应该是(2,1)(Jerry添加John为好友),这样才能构成双向确认的好友关系。
基于修正后的逻辑,我们可以用以下SQL查询John的已确认好友:
SELECT u.id, u.username FROM friends f1 -- 自连接找到双向确认的好友记录 JOIN friends f2 ON f1.friendid = f2.userid AND f2.friendid = f1.userid -- 关联users表获取好友的用户名 JOIN users u ON u.id = f1.friendid -- 筛选John发起的好友记录(先通过users表找到John的id) WHERE f1.userid = (SELECT id FROM users WHERE username = 'John');
这个查询的逻辑拆解:
- 先定位John发起的所有好友请求记录(通过f1表)
- 通过自连接f2表,筛选出那些同时向John发起好友请求的用户——这就是双向确认的好友
- 最后关联users表,拿到这些好友的id和用户名
如果friends表中的数据修正为正确的双向记录(John和Jerry各添加对方一次),执行这个SQL就能得到你期望的结果:
(1, Jerry)
内容的提问来源于stack exchange,提问作者yarek




