1

MysQL で特定の結果セットを取得しようとしていますが、何を調査すればよいかわかりません。

私は「人」テーブルを持っています:

uid(PK)、ファーストネーム、ラストネーム。

次に、次の「一致」テーブルがあります。

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

クエリの結果セットを次のように表示したいと思います。

matchid、uid1 の最初の名前、score1、uid2 の最初の名前、score2。

私の初心者のスキルはそれを得ることができないようです.私の問題は、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の結果が返されました...可能な組み合わせごとに実行されたようです)、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 に答える