2009-12-12 1 views
0

я не могу получить на правильном пути с этим, любая помощь будет оценена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 и обе команды идентификаторов поэтому выход будет

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

Это, вероятно, очень простое, но я застрял ..

заблаговременно

p.s. казалось, забыл колонку на мой первый пост, извините

+1

Почему игрок №5 и игрок №12 находятся в одной строке? Какое правило вы используете для этого? –

+0

yup. что определяет, какие два игрока находятся в одной строке? –

+1

Вы должны переосмыслить свой дизайн базы данных. Вам будет лучше с одной таблицей, которая связывает команды со спичками и одной таблицей, чтобы связать игроков с командами. Это упростит логику. –

ответ

2

Я думаю, что вам нужно:

SELECT 
    a.match_id, a.team_id AS TeamA, b.team_id AS teamB, 
    a.player_id AS PlayerA, b.player_id AS PlayerB 
FROM PLayer AS a 
    INNER JOIN Player AS b ON a.match_id = b.match_id 
WHERE a.team_id < b.team_id 

Хотя это даст вам каждую пару игроков для каждой игры, т.е.

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

Чтобы ограничить кроме того, вам нужен критерий для определения игроков, которые должны быть сопряжены.

1

Я думаю, что лучше переделать базу данных.

+0

-1 Unhelpful; не указывает на лучший дизайн – Andomar

0
select MatchA.id as MATCHID, MatchA.team_id as TEAMA, MatchB.team_id as TEAMB, MatchA.player_id as PLAYERA, MatchB.player_id as PLAYERB 
from Match as MatchA, match as MatchB 
where MatchA.id = MatchB.id and MatchA.team_id < MatchB.team_id 
+1

<> предоставит вам команду 10 с 11, но также и команду 11 с 10. – Paul

+0

Ах да, это правда. –

Смежные вопросы