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

