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
...