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

如何将关联两列的用户名称查询结果合并为单行?SQL技术问询

解决方法:通过两次JOIN获取两个玩家的名字并返回单行记录

嗨,我来帮你搞定这个问题!你之前用UNION的方式会把两个玩家的查询结果上下拼接,所以返回了两行,但其实我们可以通过两次连接users表的方式,一次性把两个玩家的名字作为独立字段查出来,每条比赛结果只返回一行记录。

核心思路

原来的UNION是将两个查询结果纵向合并,而我们需要的是在同一行中同时展示两个玩家的信息,所以要对users表进行两次连接,分别关联player1_id和player2_id,并给每个连接的表取不同的别名来区分玩家身份。

正确的SQL语句

SELECT 
    u1.name AS player1_name,
    u2.name AS player2_name,
    tournaments_results.*
FROM tournaments_results
JOIN users u1 ON tournaments_results.player1_id = u1.id
JOIN users u2 ON tournaments_results.player2_id = u2.id;

代码解释

  • 第一次连接users表并取别名u1,关联tournaments_results的player1_id,将查询到的名字重命名为player1_name;
  • 第二次连接users表并取别名u2,关联tournaments_results的player2_id,将查询到的名字重命名为player2_name;
  • 最后保留tournaments_results的所有字段,这样每条比赛记录都会对应一行,同时完整展示两个玩家的名字和比赛结果信息。

特殊情况处理(可选)

如果存在某条记录中player1_id或player2_id为NULL的情况(比如轮空的比赛),可以把JOIN改成LEFT JOIN,这样即使其中一个玩家信息不存在,也能返回这条比赛记录,不会被过滤掉:

SELECT 
    u1.name AS player1_name,
    u2.name AS player2_name,
    tournaments_results.*
FROM tournaments_results
LEFT JOIN users u1 ON tournaments_results.player1_id = u1.id
LEFT JOIN users u2 ON tournaments_results.player2_id = u2.id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:39:23