同表双外键多表关联查询返回零结果问题排查
问题分析与解决方案
先帮你拆解下导致查询返回零结果的核心问题,再给出对应解决办法:
1. 字段名匹配错误
你的tbl_user表中存储用户ID的字段是id,但查询语句里写的是user.user_id——这个字段在表中根本不存在!数据库找不到对应字段,自然无法完成关联匹配。
2. 关联逻辑不符合需求
你连续两次用INNER JOIN关联tbl_friends,要求同一个用户ID同时出现在user_one_id和user_two_id中,但看你的tbl_friends数据,没有任何一个ID同时出现在这两个字段里(现有数据是5|8、5|6),这种逻辑本身就筛选不到任何数据。
正确写法:获取所有好友对的双方用户名
如果你的需求是查询每一组好友关系对应的两个用户名,应该分别将tbl_friends的两个ID字段关联到tbl_user表,示例语句如下:
SELECT u1.user_name AS user_one_name, u2.user_name AS user_two_name FROM tbl_friends f INNER JOIN tbl_user u1 ON f.user_one_id = u1.id INNER JOIN tbl_user u2 ON f.user_two_id = u2.id;
执行后会得到结果:
user_one_name | user_two_name 3322 | 7788 3322 | 11223
扩展:查询特定用户的所有好友
比如要查询ID为5的用户的所有好友,可以用以下两种写法:
写法一:OR条件关联
SELECT u.user_name FROM tbl_friends f INNER JOIN tbl_user u ON (f.user_one_id = 5 AND f.user_two_id = u.id) OR (f.user_two_id = 5 AND f.user_one_id = u.id);
写法二:UNION合并结果
SELECT u.user_name FROM tbl_friends f INNER JOIN tbl_user u ON f.user_two_id = u.id WHERE f.user_one_id = 5 UNION SELECT u.user_name FROM tbl_friends f INNER JOIN tbl_user u ON f.user_one_id = u.id WHERE f.user_two_id = 5;
两种写法都会返回ID5的好友用户名:7788和11223。
内容的提问来源于stack exchange,提问作者aaa fyp
相关产品推荐
相关产品推荐

