MySQL JOIN,UNION,两者兼而有之?

时间:2012-07-01 12:35:10

标签: mysql

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

我有一张'人'表:

uid(PK),名字,姓氏。

然后我有一个'匹配'表:

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

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

matchid,uid1的拳头名称,得分1,uid2的名字,得分2.

我的初学者技能似乎无法得到它, 我的问题是使用第二个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个结果......似乎经历了每个可能的组合)并且匹配不匹配:

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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
...
相关问题