mysql选择问题

时间:2009-12-12 09:48:43

标签: mysql select

我无法与此相提并论,任何帮助都将受到赞赏

我有一张桌子

+---+----------+---------+-----------+
|id | match_id | team_id | player_id |
+---+----------+---------+-----------+
| 1 |        9 |      10 |         5 |
| 2 |        9 |      10 |         7 |
| 3 |        9 |      10 |         9 |
| 4 |        9 |      11 |        12 |
| 5 |        9 |      11 |        15 |
| 6 |        9 |      11 |        18 |
+---+----------+---------+-----------+

我想用match_id中的where和两个团队ID选择这些,所以输出将是

+---------+-------+------+---------+---------+
| MATCHID | TEAMA | TEAMB| PLAYERA | PLAYERB |
+---------+-------+------+---------+---------+    
|       9 |    10 |   11 |       5 |      12 |
|       9 |    10 |   11 |       7 |      15 |
|       9 |    10 |   11 |       9 |      18 |
+---------+-------+------+---------+---------+

这可能很简单,但我卡住了..

提前致谢

P.S。似乎在我的第一篇文章中忘了一栏,抱歉

4 个答案:

答案 0 :(得分:1)

我认为你应该重新设计你的桌子,也许你想要输出的格式应该是你的桌面设计。

根据您的设计,可以让三个或更多团队互相对抗......


因此。我再试一次(自己来自Oracle,我真的很想念ROWNUM)。

以下查询应该为您提供您想要的结果,但我不确定您是否应该在纯SQL中真正做到这一点。也许你可以组合你客户的团队?

SELECT m1.match_id, m1.team_id, m2.team_id, m1.player_id, m2.player_id
FROM (
  SELECT match_id, team_id, player_id,
   -- get ranking
   ( SELECT 1 + count(*)
     FROM   matches m1b
     WHERE  m1b.match_id = m1a.match_id
     AND    m1b.team_id = m1a.team_id
     AND    m1b.player_id < m1a.player_id) rank
  FROM matches m1a
  WHERE m1a.team_id = (SELECT MIN(team_id) -- first team
                       FROM    matches
                       WHERE match_id = m1a.match_id)
)  m1,
(
  SELECT match_id, team_id, player_id,
   -- get ranking
   ( SELECT 1 + count(*)
     FROM   matches m2b
     WHERE  m2b.match_id = m2a.match_id
     AND    m2b.team_id = m2a.team_id
     AND    m2b.player_id < m2a.player_id) rank
  FROM matches m2a
  WHERE m2a.team_id = (SELECT MAX(team_id) -- second team
                        FROM matches
                        WHERE match_id = m2a.match_id)
)  m2
WHERE m1.match_id = m2.match_id
AND   m1.rank = m2.rank

我在这里做的是:

  1. 从每场比赛较低的team_id队伍中选择所有队员并给他们排名(每场比赛1到3)
  2. 从每场比赛更高的team_id队伍中选择所有队员并给他们排名(每场比赛1到3)
  3. 将这两个查询合并到一个结果中,其中match_id和排名匹配

答案 1 :(得分:0)

match是mysql中的保留字。这里使用的表名是匹配

select match_id, sum(if(id=1, team_id,0))team_A, sum(if(id=2,team_id,0)) team_b 
from matchs 
group by match_id;
+----------+--------+--------+
| match_id | team_A | team_b |
+----------+--------+--------+
|        5 |      9 |     10 |
+----------+--------+--------+
1 row in set (0.00 sec)

答案 2 :(得分:0)

我不确定之前的答案是否会给你你想要的东西,至少我把你的问题用来表示别的东西 - 也许你可以澄清表格和查询的目的。如果该表将团队与匹配关联,并且您希望查询向您显示与一个匹配关联的所有团队,那么您的查询应该是

select team_id as teams from table where match_id = id_here

会让你回来(id_here为5)

teams
-----
9
10

答案 3 :(得分:0)

看看下面的网址,这正是你想要的,但是在t-sql中。它可以合并任意数量的行。

相关问题