我无法与此相提并论,任何帮助都将受到赞赏
我有一张桌子
+---+----------+---------+-----------+
|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。似乎在我的第一篇文章中忘了一栏,抱歉
答案 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 :(得分: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中。它可以合并任意数量的行。