2012-07-01 2 views
1

В MysQL я пытаюсь получить определенный набор результатов, но я не уверен, что делать.MySQL JOIN, UNION, оба или нет?

У меня есть таблица 'людей' с:

UID (PK), FirstName, LastName.

Я тогда сопоставляют таблицу с:

matchid, UID1 (Ф.К.), score1, UID2 (Ф.К.), score2

Я хотел бы, чтобы результирующий набор мой запрос, чтобы показать:

matchid, имя uid1, оценка1, первое имя uid2, score2.

Мои навыки начинающего, похоже, не могут получить его, моя проблема связана со вторым uid и показывает первое имя этого человека как столбец в результирующем наборе вместо id.

Я пытался, так же, как тест с именами и matchid:

Select * From 
    (Select matches.idmatches, people.FirstName, 
     From people, matches 
     Where matches.uid1 = people.uid) as a 
    JOIN 
    (Select matches.idmatches, people.FirstName, 
    From people, matches 
    Where matches.uid2 = people.uid) as b 

Но она возвращает имя каждого несколько раз (у меня было 6 записей и вернулся 36 результатов ... казалось, пройти через каждый возможные комбинации) и matchid не совпадает:

uid1 matchid uid2 matchid 
Michael 13 Jennii 13 
Michael 14 Jennii 13 
Michael 15 Jennii 13 
Michael 16 Jennii 13 
Michael 17 Jennii 13 
Michael 18 Jennii 13 
Michael 13 Jennii 14 
Michael 14 Jennii 14 
Michael 15 Jennii 14 
Michael 16 Jennii 14 
Michael 17 Jennii 14 
Michael 18 Jennii 14 
Michael 13 Jennii 15 
...and so on...... you get the point... 

что я хочу:

uid1 matchid uid2 matchid 
    Michael 13 Jennii 13 
    Michael 14 Jennii 14 
.......and so on..... with no duplicates. 

Надеюсь, что все имеет смысл, просто не уверен, прежде всего, если я правильно сделал таблицы, то если использование соединения является правильным методом, и если да .. Я действительно не понимаю, как я получаю этот вывод, что я делаю неправильно. Спасибо, кучи.

+0

вы хотите использовать внутреннее соединение и группа – Drewdin

ответ

1

Почему бы не использовать:

SELECT matchid, p1.firstname AS firstname1, matches.score1, p2.firstname AS firstname2, matches.score2 
FROM matches, people p1, people p2 
WHERE matches.uid1 = p1.uid 
AND matches.uid2 = p2.uid 
+0

Благодаря осыпает Джоселин, это возвращается результат именно так, как я спросил выше. Я понимаю это, но не думаю, что я бы справился с этим сам. Благодарю. –

1
SELECT 
    p1.firstname AS player1, m.score1, 
    p2.firstname AS player2, m.score2 
FROM matches AS m 
INNER JOIN people AS p1 
    ON m.uid1 = p1.uid 
INNER JOIN people AS p2 
    ON m.uid2 = p2.uid 
GROUP BY m.matchid 

Вы получите:

player1 score1 player2 score2 
Alice 12  Bob  13 
... 
+0

Эй, Дмитрий, Это также вернуло правильный результат. Спасибо за кучи за ответ, помогли мне понять. –