4

私はまだSQLを学んでおり、私の脳はこれに苦労しています。

3 つのテーブルがあるとします。

teams
players

そしてteams_players私のリンクテーブルとして

私がやりたいことは、クエリを実行して各チームとそのプレーヤーを取得することだけです。

私はこれを試しました:

SELECT * 
FROM teams 
INNER JOIN teams_players 
    ON teams.id = teams_players.team_id 
INNER JOIN players 
    ON teams_players.player_id = players.id

しかし、各チームの各プレーヤーに対して個別の行が返されました。JOIN はそれを行う正しい方法ですか、それとも何か他のことをすべきですか?

- - - - - - - - - - - - - - - - - - - - - 編集

わかりましたので、私が聞いたところによると、これは必ずしも悪い方法ではありません。ループを実行している間、チームごとにデータをグループ化する必要があります。

提供された変更された SQL ステートメントはまだ試していませんが、今日試してみて、またご連絡いたします。

構造に関する質問に答えるには、返された行構造について考えていなかったと思います。これは、混乱の原因の一部です。この特定のケースでは、各チームは 4 人 (またはそれ以下) のプレイヤーに制限されているため、次のような構成が役立つと思います。

teams.id, teams.name, players.id, players.name, players.id, players.name, players.id, players.name, players.id, players.name,
1         Team ABC    1           Jim           2           Bob           3            Ned          4             Roy
2         Team XYZ    2           Bob           3           Ned           5            Ralph        6             Tom
4

2 に答える 2

3

これは推測ですが、チームとチーム内のプレーヤーのリストが1行に表示されます。

どうですか

SELECT t.id, GROUP_CONCAT(p.id)
FROM teams t
INNER JOIN teams_players tp
    ON t.id = tp.team_id 
INNER JOIN players p
    ON tp.player_id = p.id
GROUP BY t.id

マニュアルが役立つ場合がありますhttp://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html#function_group-concat

于 2012-09-02T01:46:23.160 に答える
1

MySQLはデータをテーブル形式で返すので、チームの各プレーヤーに個別の行を返さずに、各プレーヤーが関連付けられているチームを含むプレーヤーとチームのリストを1つのテーブル/結果セットに返す方法を考えてみてください。

クエリは次を返す必要があります。

team.id, team.name, player.id, player.name
1        team1      1          player1
1        team1      2          player2
2        team2      3          player3
2        team2      4          player4

あなたがのようなものが欲しいなら

team.id, team.name
1        team1
2        team2

player.id, player.name, team.id
1          player1      1
2          player2      1
3          player3      2
4          player4      2

2つの別々の結果セットがある場合は、2つのクエリを実行する必要があります。チームごとに異なる結果セットが必要な場合は、チームごとに追加のクエリを作成する必要があります。

そうは言っても、複数のクエリを実行する必要がない代わりに、多くの重複データが提供されることを除いて、最初のクエリにそれほど問題はありません。

于 2012-09-02T01:43:23.600 に答える