私は5つのテーブルを持っています:
Stage: ID, stage_name, stage_points, stage_number
Shooter: ID, sh_uid, sh_al, sh_cat
Stage_Shooters: ID, StageID, ShooterID
Score: ID, miss, proc, bth, finalTime, shtr
Stage_Scores: ID, StageID, ScoreID
Stage_Shooters と Stage_Scores は、指定されたテーブルの many_many 関係です。たとえば、Shooter は Stage_Shooters を介してステージに接続されます。
各ステージのシューターのスコアをすべて取得しようとしています。現在、5 つのステージと 28 のシューターがあるので、140 のスコアになります。最終的には次のようにしたい:
--------------------------------------------------------------------------------
| Shooter | Stage Name | Stage Name |
--------------------------------------------------------------------------------
| Alias | Cat | Raw | M | P | B | Fin | Raw | M | P | B | Fin |
--------------------------------------------------------------------------------
| Short Round | Junior | 24.00 | 0 | 0 | 1 | 19.00 | 7.00 | 0 | 0 | 1 | 6.00 |
--------------------------------------------------------------------------------
| Indy Jones | Senior | 24.00 | 0 | 1 | 1 | 22.00 | 4.00 | 0 | 1 | 1 | 12.00 |
--------------------------------------------------------------------------------
このためには、ピボット テーブルを作成する必要があると考えていますが、今のところ、次の結果を得ようとしています。
-----------------------------------------------------------------------
Stage Name | Shooter Alias | Shooter Category | Raw | M | P | B | Fin |
-----------------------------------------------------------------------
Stage Name | Shooter Alias | Shooter Category | Raw | M | P | B | Fin |
-----------------------------------------------------------------------
次のSQLを実行すると、140ではなく700の結果が得られます(予想どおり)
SELECT ssh.stage_name, ssh.sh_al, ssh.sh_cat, ssc.time, ssc.M, ssc.P, ssc.B, ssc.Fin
FROM (
SELECT s.stage_name, sh.sh_al, sh.sh_uid, sh.sh_cat
FROM Shooter sh
INNER JOIN Stage_Shooters stsh ON stsh.ShooterID = sh.ID
INNER JOIN Stage s ON s.ID = stsh.StageID
) ssh
INNER JOIN (
SELECT s.stage_name stageName, sc.time, sc.shtr, sc.miss M, sc.proc P, sc.bth B, sc.finalTime Fin
FROM Score sc
INNER JOIN Stage_Scores stsc ON stsc.ScoreID = sc.ID
INNER JOIN Stage s ON s.ID = stsc.StageID
) ssc
WHERE ssh.sh_uid = ssc.shtr
ORDER BY ssh.sh_al
WHERE ステートメントを削除すると、19600 件の結果が得られます。
結合またはサブクエリを使用して、必要な 140 行だけを取得するにはどうすればよいですか?