MySQL JOIN, UNION, оба или нет?

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

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

uid (PK), имя, фамилия.

Затем у меня есть таблица соответствия:

matchid, uid1 (fk), оценка1, uid2(fk), оценка2

Я хотел бы, чтобы набор результатов моего запроса показывал:

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

Кажется, мои навыки новичка не могут его получить, моя проблема со вторым идентификатором и отображением имени этого человека в виде столбца в наборе результатов вместо идентификатора.

Я попробовал, так же, как тест с именами и 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.

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

2 ответа

Решение

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

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
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
...
Другие вопросы по тегам