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

毒药8

我有两张{match_id}_match_main桌子和users桌子。match_maintable 存储所有参加比赛的玩家。

我想在两个不同的列中选择在同一张桌子上为两支球队效力的名字球员。

另一个表match_master存储正在播放的所有比赛:

描述match_master:match_id,team1_id,team2_id

描述{match_id}_match_main为:player_id,team_id,goal,yellow,red。

描述users为:player_id,player_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';

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

缺口

我认为这个查询会给你你想要的结果。team_id从 中找到不同的match_main,然后JOINsmatch_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确保我们在最终结果中得到每个团队的球员。最后两个JOINsusers使我们能够从该表中获取玩家姓名。

更新

要使用球队 id 的 from 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}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在一列MYSQL中将两个过去的日期之间的日期分组

如何在MySQL的另一列中的两个唯一值之间更新一列?

如何在MySQL中相同列不同行中找到两个值之间的差异

如何从同一张表中查询同一列但条件不同的两个不同的总和?

PHPMYADMIN | 我们如何在两个不同的MySQL数据库(在同一服务器内)中同步两个表?

如何在同一列表中具有两个不同的排序顺序?

如何计算同一列中的两个不同的列值?

如何从表中的同一列“计数”两个不同的条件?

如何在两个或多个表中获取同一列?

如何基于单独的日期列划分同一列中的两个值

在mysql的两个表中基于同一列对两个列值进行计数

如何在同一表格的两个不同列中查找和显示相似单词的数量(MySql,PHP)

如何串联两个列值并存储在另一列中mysql php

如何从MYSQL的一列中获得两个单词

如何从MYSQL的一列不同值中获取计数

如何在mysql的同一张表的不同列中添加两个或多个时间数据类型

如何在MYSQL中为单个ID计算同一列中记录的不同值

获取同一列多行的总值和两个不同行的总和(mysql查询)

如何从同一SQL中的两个不同表中获取两个值

如何在mysql中两次在1个表中选择同一列

如何将来自同一列但位于不同行的两个值相除

MySQL:如何获取一列中共享另一列中不同值的条目的 AVG 值?

如何从 SQL 连接中的同一列返回两个不同的值?

如何从mysql的同一列中选择不同的值

SQL-如何在一列和两个结果中获取两个不同列的值?

如何将两个表中的值包含在同一列中

MYSQL - 如何在同一个表上的两个不同行上减去两列?

如何在单个查询中更新mysql中同一列中的不同值?

如何从同一列中的两个不同日期输出前 5 名?