SQL如何通过JOIN关联同一张User表查询请求双方姓名信息
SQL多表JOIN关联查询正确实现
核心问题:Request表同时存储发起人、接收人两个用户ID,需要对User表做两次别名关联,分别匹配两类用户身份,单次关联User表会出现字段匹配错位、数据缺失的问题。
正确SQL语句
SELECT r.Id_request, uc.name AS Caller_name, uc.surname AS Caller_surname, ur.name AS Receiver_name, ur.surname AS Receiver_surname, c.Category FROM Request r -- 关联用户表取发起人信息,用别名区分身份 INNER JOIN User uc ON r.Id_caller = uc.Id -- 再次关联用户表取接收人信息,必须使用不同别名 INNER JOIN User ur ON r.Id_receiver = ur.Id -- 关联分类表取分类名称 INNER JOIN Category c ON r.id_category = c.Id WHERE r.Id_caller = 1;
常见踩坑点
- 同一张表多次关联必须设置不同别名,否则数据库会抛出字段歧义错误,也无法区分不同身份的用户字段
- 关联条件不要写混:匹配发起人时关联条件绑定
Id_caller字段,匹配接收人时绑定Id_receiver字段,写反会导致发起人和接收人姓名颠倒 - 如果业务中存在请求未绑定分类、接收人账号已删除的场景,可将对应关联的
INNER JOIN替换为LEFT JOIN,避免有效请求数据被过滤
样例数据执行结果
基于给出的测试数据,执行上述SQL后返回结果如下:
| Id_request | Caller_name | Caller_surname | Receiver_name | Receiver_surname | Category |
|---|---|---|---|---|---|
| 1 | Alex | Morgan | Tom | Brady | Party |
| 2 | Alex | Morgan | Smith | Rowe | Football match |
内容的提问来源于stack exchange,提问作者Joakim
相关产品推荐
相关产品推荐

