当前位置: 首页 > 知识库问答 >
问题:

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

高增
2023-03-14

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

match_master:match_id,team1_id,team2_id

{match_id}_match_main的Desc是:player_id,team_id,goal,elegel,red。

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';

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

共有1个答案

齐坚成
2023-03-14

我想这个查询会给你想要的结果。它从match_main中查找不同的team_id值,然后再次将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确保我们在最终结果中获得每个队的球员。最后两个joinusers的连接使我们能够从该表中获得播放器名称。

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}

 类似资料:
  • 我试图让发送消息给另一方的用户和接收消息的用户在每行的一行中。 那么oracle sql查询应该是什么呢

  • 目前是同一个tomcat下有两个应用A,B A应用修改了语言环境(由中文修改成为英文) 这时候我希望B的LocaleContextHolder环境上下文也和A保持一致,请问怎么实现?

  • 问题内容: 我有一个名为“ posts”的SQL表,如下所示: 每个类别编号对应一个类别。我将如何计算每个类别在 一个sql查询中 全部出现在帖子中的次数? 例如,这样的查询可能返回如下符号数组: 我当前的方法是对每个可能的类别使用查询,例如:,然后将返回值组合到最终数组中。但是,我正在寻找一种仅使用一个查询的解决方案。 问题答案:

  • 我需要你对Web应用程序概念的帮助。我想使用单个查询从不同的表中获取不同的列。所有表中的一列都是相同的,比如pk_data(varchar)。但是我需要基于列的不同列。例如,我需要第一个表的用户名和第二个表的地址,第三个表的年龄和第四个表的成本。但是我还需要使用带有列的where子句。 我们可以用其他方式理解这个问题。我有一个变量,其中包含许多。我想根据此记录获取数据。 并且< code>Hash

  • 问题内容: 我想对同一字段进行计数以获得不同的值,例如: 用户{user_id,性别} 性别显然可以是男性或女性:) 我想获得所有男性和女性的计数,即 但我很困惑,因为他们来自同样的感谢 问题答案: 尝试以下操作以获得明智的结果: 输出: 尝试以下操作以获得总计的行明智结果: 输出: 尝试此操作以获得列明智的结果: 输出: 看到这个SQLFiddle

  • 问题内容: 我运行foo.com。我在foo.com中有两个不同的应用程序:一个是foo.com/bar,另一个是foo.com/example。我使用会话来跟踪有关用户登录的信息,但是如果用户从foo.com/bar转到foo.com/example,则foo.com/example会看到用户从foo.com/启动的会话并使用该信息。我的问题是,如何同时为每个目录进行两个不同的会话? 问题答案:

  • 问题内容: 假设我有两个表,表A和表B,并且我想比较某个列。 例如, 表A包含以下列:IP,主机,应用 表B具有以下列:IP,数据中心,服务器,模型,最后更新 如何比较两个表之间的IP列以获取差异? 我知道表是否具有相同的列,我可以使用并集和“减号”来获取差异,但是我无法找出表具有不同列的方式。 谢谢! 问题答案: 这将输出两个表中不匹配行的所有列,并且在任一侧都有NULL。

  • 我需要创建三个类:客户、产品和订单。我希望我的orders类接受来自客户和产品的实例(即,能够让一个订单包含关于客户和他们正在订购的产品的信息)。在JavaScript中设置这一点的最佳方法是什么?我最初想让我的customer和products类扩展order类,但我是否能够让order同时扩展customer和products类?