【问题标题】:SQL combining tables to single rowsSQL 将表组合成单行
【发布时间】:2021-10-21 10:31:41
【问题描述】:

将表格组合成单行的问题。

桌面游戏:

ID player1_ID player2_ID des
11 23 68 something
82 34 23 whatever
302 13 34 mmmmmmmm

表玩家:

ID alias
23 Jeex
34 Jack
68 Jill
13 John

我开始查询的关键是玩家 ID 之一。

我想显示玩家 ID=23 正在玩的所有游戏。可以是 Player1 或 Player2。

我也尝试过使用交叉表,

表交叉:

ID player_ID game_ID
1 23 11
2 68 11
3 34 82
2 23 82
3 13 302
3 34 302

但没有结果。

问题是我想要输出中的别名其他玩家数据以及一些额外的棋盘数据,而不需要每场比赛处理多行。

因此,请求的输出如下:

game_ID player1_ID player2_ID des alias1 alias2
11 23 68 something Jeex Jill
82 34 23 whatever Jack Jeex

我尝试了几种方法,但无法解决这个问题。感谢您的帮助。

【问题讨论】:

  • 请分享“几种方法”(以及表结构的完整细节,以及一些示例数据)

标签: sql join union


【解决方案1】:

您必须将games 加入到players 的2 个副本中,这样您就可以获得别名并在WHERE 子句中过滤games 以仅获取您想要的玩家的行:

SELECT g.*, 
       p1.alias alias1,
       p2.alias alias2 
FROM games g
INNER JOIN players p1 ON p1.id = g.player1_ID
INNER JOIN players p2 ON p2.id = g.player2_ID
WHERE ? IN (g.player1_ID, g.player2_ID)

?改成你想要的玩家ID。

【讨论】:

  • 谢谢。我忘记了别名表名的可能性。顶部。
【解决方案2】:

试试这个:

 SELECT g.*, p1.alias AS alias1, p2.alias AS alias2 FROM games g
 JOIN players p1 ON p1.id = g.player1_ID
 JOIN players p2 ON p2.id = g.player2_ID

【讨论】:

    猜你喜欢
    • 2013-12-31
    • 2023-03-09
    • 2012-05-19
    • 1970-01-01
    • 2019-03-15
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多