mysql中如何获取同一列的两个不同值

cngwdvgl  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(381)

我有两张table {match_id}_match_main 表和 users table。 match_main 表中存储了所有为比赛而比赛的球员。
我想选择在两个不同的栏为同一个表中的两个队比赛的球员的名字。
另一张table match_master 存储正在进行的所有比赛:
描述 match_master :匹配\u id,team1 \u id,team2 \u id
描述 {match_id}_match_main 是:球员id,球队id,球门,黄色,红色。
描述 users 是:player\u id,player\u name。
我试过用join

select B.Name as home_player_name,B1.Name as away_player_name 
from {match_id}_match_main A 
inner join users B on A.player_id=B.player_id,
users B1
inner join {match_id}_match_main A1 on A1.player_id=B1.player_id
where A.team_id='t1' and A1.team_id='t2';

但是这个查询不提供不同的值,它提供重复的值。

hpxqektj

hpxqektj1#

我想这个查询会给你你想要的结果。它发现了 team_id 值来自 match_main ,那么 JOIN s到 match_main 再来两次,以获得每个团队的球员名单,以及一个行号,用于确保我们不会重复成对的球员:

SELECT u1.player_name, u2.player_name
FROM (SELECT MIN(team_id) AS team_1, MAX(team_id) AS team_2 FROM match_main) teams
JOIN (SELECT *, @rn1 := @rn1 + 1 AS rownumber
      FROM match_main
      CROSS JOIN (SELECT @rn1 := 0) r
      ORDER BY team_id ASC) m1 ON m1.team_id = teams.team_1
JOIN (SELECT *, @rn2 := @rn2 + 1 AS rownumber
      FROM match_main
      CROSS JOIN (SELECT @rn2 := 0) r
      ORDER BY team_id DESC) m2 ON m2.team_id = teams.team_2 AND m2.rownumber = m1.rownumber
JOIN users u1 ON u1.player_id = m1.player_id
JOIN users u2 ON u2.player_id = m2.player_id

我在dbfiddle上创建了一个小演示,这样您就可以在工作中看到它并使用它。
第一个派生表:

SELECT MIN(team_id) AS team_1, MAX(team_id) AS team_2 FROM match_main

在每场比赛中找到两个独立的队伍。第二个和第三个派生表:

SELECT *, @rn1 := @rn1 + 1 AS rownumber
FROM match_main
CROSS JOIN (SELECT @rn1 := 0) r
ORDER BY team_id ASC

本质上是一样的。它们为表中的每一行生成行号 match_main 表,按 team_id 上升或下降,使每个队的队员都进入上半部分。这个 m2.rownumber = m1.rownumber 确保我们在最终结果中得到每个团队的球员。最后两个 JOIN s到 users 使我们能够从该表中获取玩家名称。
更新
使用团队id match_master (为了确保主客场球员被正确分类)你需要使用 {match_id} 查询中的值(共3处);这样的方法应该有用:

SELECT u1.player_name, u2.player_name
FROM match_master teams
JOIN (SELECT *, @rn1 := @rn1 + 1 AS rownumber
      FROM {match_id}_match_main
      CROSS JOIN (SELECT @rn1 := 0) r
      ORDER BY team_id ASC) m1 ON m1.team_id = teams.team1_id
JOIN (SELECT *, @rn2 := @rn2 + 1 AS rownumber
      FROM {match_id}_match_main
      CROSS JOIN (SELECT @rn2 := 0) r
      ORDER BY team_id DESC) m2 ON m2.team_id = teams.team2_id AND m2.rownumber = m1.rownumber
JOIN users u1 ON u1.player_id = m1.player_id
JOIN users u2 ON u2.player_id = m2.player_id
WHERE teams.match_id = {match_id}

相关问题