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

如何用SQL关联多表,在同一行展示申请人、主管及审批人邮箱?

数据库查询需求与解决方案

现有表结构

现有三张数据库表:

  • USERS:存储所有用户数据,字段为ID、名、姓、邮箱;
  • REQUESTS:存储用户提交的各类请求,字段为ID、申请人ID;
  • DELEGATES:存储请求对应的主管和审批人ID,字段为ID、请求ID、主管ID、审批人ID。

关联关系:

  • 申请人ID、主管ID、审批人ID均关联USERS表的ID字段
  • 请求ID关联REQUESTS表的ID字段

当前问题

目前通过左连接REQUESTS与USERS、DELEGATES,已能获取申请人邮箱,但主管和审批人仍显示ID,需要编写SELECT与JOIN语句,实现将申请人、主管及审批人的邮箱在同一行展示,同时确认是否需要使用临时表。

表数据示例

USERS表

ID名姓邮箱
1JohnDoejohn.doe@test.com
2JaneDoejane.doe@test.com
3BabyDoebaby.doe@test.com

REQUESTS表

ID申请人ID
A1
B2
C3

DELEGATES表

ID请求ID主管ID审批人ID
xA23
yB32
zC11

当前查询结果

ID申请人邮箱主管ID审批人ID
Ajohn.doe@test.com23
Bjane.doe@test.com32
Cbaby.doe@test.com11

期望查询结果

ID申请人邮箱主管邮箱审批人邮箱
Ajohn.doe@test.comjane.doe@test.combaby.doe@test.com
Bjane.doe@test.combaby.doe@test.comjane.doe@test.com
Cbaby.doe@test.comjohn.doe@test.comjohn.doe@test.com

解决方案SQL语句

只需要多次关联USERS表即可,不需要临时表。具体SQL如下:

SELECT
    r.ID AS ID,
    u_app.email AS Applicant,
    u_sup.email AS Supervisor,
    u_appr.email AS Approver
FROM REQUESTS r
JOIN DELEGATES d ON r.ID = d.request_id
JOIN USERS u_app ON r.applicant = u_app.ID
JOIN USERS u_sup ON d.supervisor = u_sup.ID
JOIN USERS u_appr ON d.approver = u_appr.ID;

说明

  • 给USERS表分别起三个别名:u_app(关联申请人)、u_sup(关联主管)、u_appr(关联审批人),通过不同关联条件获取对应邮箱。
  • 若存在请求无对应DELEGATES记录的情况,可将JOIN改为LEFT JOIN,避免丢失数据。
  • 不需要使用临时表,直接多表关联就能实现需求,临时表反而会增加不必要的开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:45:53