如何将profile表与好友的好友(FOF)查询进行关联?
解决FOF查询关联profile表的问题
你的JOIN写法其实已经建立了关联,但问题出在SELECT语句只返回了sender字段,没有包含profile表的任何数据,所以看起来像是没关联成功。下面是修正后的两种写法:
写法一:基于原查询修改
保留你原来的子查询结构,补充profile字段的查询并明确表别名:
SELECT DISTINCT r.sender, p.* -- 替换p.*为你需要的具体字段(如p.userId, p.username等) FROM request r LEFT JOIN profile p ON p.userId = r.sender WHERE r.receiver IN ( SELECT sender FROM request WHERE receiver = ${theuser} AND status = 1 ) AND r.sender NOT IN ( SELECT sender FROM request WHERE receiver = ${theuser} AND status = 1 ) AND r.sender <> ${theuser};
写法二:用JOIN替代子查询(性能更优)
通过多表JOIN直接关联用户的好友和好友的好友,同时确保所有好友关系都是已确认状态(status=1):
SELECT DISTINCT fof.sender, p.* FROM request user_friends -- 关联用户的好友 JOIN request fof ON user_friends.sender = fof.receiver -- 关联FOF的profile信息 LEFT JOIN profile p ON p.userId = fof.sender WHERE user_friends.receiver = ${theuser} AND user_friends.status = 1 AND fof.status = 1 -- 确保FOF的好友关系也是已确认的 AND fof.sender NOT IN ( SELECT sender FROM request WHERE receiver = ${theuser} AND status = 1 ) AND fof.sender <> ${theuser};
注意事项
- 如果只需要存在profile记录的FOF,把
LEFT JOIN改成INNER JOIN即可。 - 避免用
p.*,尽量指定具体需要的字段,减少数据传输量。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

