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

SQL如何将多连接条件的查询结果转为多列,获取收发双方用户信息

问题解答

你当前编写的SQL使用OR作为JOIN匹配条件,会让每条Payment记录在匹配到发件人、收件人时各生成一行结果,因此两个ID不同时就会返回两行数据。要实现收发件人信息展示在同一行,需要给User表设置不同别名,分别关联sender_id和recipient_id两个字段。

正确SQL语句

SELECT 
  p.amount,
  p.message,
  su.email AS sender_email,
  ru.email AS recipient_email
FROM Payment p
-- 关联发件人用户表
LEFT JOIN User su 
  ON p.sender_id = su.id
-- 关联收件人用户表
LEFT JOIN User ru 
  ON p.recipient_id = ru.id;

说明

  • 这里给User表分别设置了别名su(代指发件人用户)和ru(代指收件人用户),两次独立关联避免表名冲突,也能分别取到两个用户的邮箱信息
  • 选用LEFT JOIN可以避免因发件人/收件人ID不存在(比如用户已注销)导致整条支付记录被过滤,如果你确定所有支付记录的sender_id、recipient_id都在User表中有对应数据,可以替换为INNER JOIN
  • 通过AS设置字段别名,直接返回你需要的sender_email、recipient_email字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 07:30:04