次の表 (** は秘密鍵を示します) でチームの複数のゲームでプレーしたプレーヤーを見つけようとしていますが、私が思いつくことができる最良のクエリ (以下) が最も効率的であるとは信じがたいです。 . それを改善する方法についてのアイデアと、その理由についての説明をいただければ幸いです (SQL を学習しようとしています)。
Team (*tid*, name)
Game (*gid*, tid)
Player (*gid*, *name*)
SELECT Team_Name, Player_Name
FROM (SELECT GID, TID FROM GAME) G
,(SELECT NAME AS Player_Name, GID FROM PLAYER) P
,(SELECT NAME AS Team_Name, TID FROM TEAM) T
WHERE ( G.GID = P.GID
AND Player_Name IN (SELECT P.NAME
FROM GAME G
,PLAYER P
WHERE G.GID = P.GID
GROUP BY P.NAME
HAVING COUNT(P.NAME) > 1)
AND T.TID = G.TID
)
GROUP BY Team_Name, Player_Name
HAVING COUNT(Player_Name) > 1
ORDER BY Team_Name