1

在 MySQL 中,我试图获得某个结果集,但不确定要研究什么。

我有一个“人”表:

uid(PK),名字,姓氏。

然后我有一个“匹配”表:

matchid,uid1(fk),score1,uid2(fk),score2

我希望我的查询结果集显示:

matchid,uid1 的名字,score1,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.

希望一切都有意义,首先不确定我是否正确地制作了表格,然后如果使用连接是正确的方法,如果是的话..我真的不明白我是如何得到这个输出的,我做错了什么. 多谢了。

4

2 回答 2

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
于 2012-07-01T12:39:15.830 回答
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
...
于 2012-07-01T12:44:32.027 回答