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

如何在SQL中两次连接同一表并区分关联的姓名字段?

解决同一表两次连接的字段区分问题

要获取通话时长、主叫姓名和被叫姓名,核心是两次关联People表,通过给关联的People表设置不同别名,来区分主叫和被叫对应的姓名字段,具体实现如下:

基础查询(内连接)

如果只需要保留主叫和被叫号码都存在于People表中的通话记录,使用内连接:

SELECT 
    pc.duration,
    caller_p.name AS caller_name,
    receiver_p.name AS receiver_name
FROM 
    Phone_calls pc
JOIN 
    People caller_p ON pc.caller = caller_p.phone_number
JOIN 
    People receiver_p ON pc.receiver = receiver_p.phone_number;

代码说明:

  • 给Phone_calls表起别名pc,简化后续引用
  • 第一次关联People表时用别名caller_p,关联条件匹配主叫号码pc.caller和People表的phone_number,将该表的name字段重命名为caller_name
  • 第二次关联People表时用别名receiver_p,关联条件匹配被叫号码pc.receiver和People表的phone_number,将该表的name字段重命名为receiver_name

兼容空值的查询(左连接)

如果需要保留所有通话记录,即使主叫或被叫号码不在People表中,可以使用左连接,并通过COALESCE函数处理空值:

SELECT 
    pc.duration,
    COALESCE(caller_p.name, 'Unknown') AS caller_name,
    COALESCE(receiver_p.name, 'Unknown') AS receiver_name
FROM 
    Phone_calls pc
LEFT JOIN 
    People caller_p ON pc.caller = caller_p.phone_number
LEFT JOIN 
    People receiver_p ON pc.receiver = receiver_p.phone_number;

代码说明:

  • LEFT JOIN会保留Phone_calls中的所有记录,即使关联的People表中没有匹配的号码
  • COALESCE函数会将空值替换为指定的默认值(这里是'Unknown'),避免结果中出现NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:45:42