如何在MySQL中通过foreign key关联查询并替换外键为对应名称?
解决方法:将Friend表中的ID替换为对应用户名
这问题其实很常见,核心就是通过两次关联Account表,分别把user_id和frn_id映射成对应的用户名。直接看具体的SQL语句:
SELECT f.id, a1.name AS user_id, a2.name AS frn_id FROM friend f INNER JOIN account a1 ON f.user_id = a1.id INNER JOIN account a2 ON f.frn_id = a2.id;
简单解释下逻辑:
- 给
friend表起别名f,方便后续引用; - 第一次关联
account表(别名a1),用friend.user_id和account.id匹配,拿到当前用户的名字,并重命名为user_id(对应你想要的结果列名); - 第二次关联
account表(别名a2),用friend.frn_id和account.id匹配,拿到朋友的名字,重命名为frn_id; - 最后查询
friend表的id,加上两个关联得到的用户名,就得到你想要的结果了。
如果你的业务场景中,friend表可能存在user_id或frn_id在account表中没有对应记录的情况(虽然题目里是外键约束,理论上不会有),可以把INNER JOIN换成LEFT JOIN,这样即使没有对应记录,也会保留这条数据,对应的用户名会显示为NULL。
内容的提问来源于stack exchange,提问作者Nawaraj
相关产品推荐
相关产品推荐

