如何在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
相关产品推荐
相关产品推荐

