如何将关联两列的用户名称查询结果合并为单行?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_
相关产品推荐
相关产品推荐

