MySQL中一个表字段对应另一表两个值的两表关联查询实现方法
MySQL多表关联查询通话双方姓名解决方案
错误原因分析
你编写的SQL存在两处问题:
- 表名不匹配:人员信息表实际名为
people,你写的person会直接抛出表不存在的报错 - 关联逻辑错误:单次关联
people表时,关联条件要求同一个people.Number同时等于某条通话记录的主叫、被叫号码,不存在符合该条件的数据,因此即使表名修正也查不到结果
正确实现方案
需要对people表做两次别名关联,分别匹配主叫号码和被叫号码,查询语句如下:
SELECT c_p.Person AS 主叫姓名, r_p.Person AS 被叫姓名 FROM phone_calls pc -- 第一次关联people表匹配主叫信息 INNER JOIN people c_p ON pc.Caller = c_p.Number -- 第二次关联people表匹配被叫信息 INNER JOIN people r_p ON pc.Receiver = r_p.Number;
如果需要保留没有匹配到姓名的通话记录,可以将INNER JOIN替换为LEFT JOIN,无匹配的姓名位会返回NULL
查询结果
执行上述语句后会得到你预期的输出:
| 主叫姓名 | 被叫姓名 |
|---|---|
| Jack | Gill |
| Jane | Bob |
内容的提问来源于stack exchange,提问作者Mr T
相关产品推荐
相关产品推荐

