You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_requestCaller_nameCaller_surnameReceiver_nameReceiver_surnameCategory
1AlexMorganTomBradyParty
2AlexMorganSmithRoweFootball match

内容的提问来源于stack exchange,提问作者Joakim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:22:20