mysqlで次のテーブルを設定しています。
CREATE TABLE `games_characters` (
`game_id` int(11) DEFAULT NULL,
`player_id` int(11) DEFAULT NULL,
`character_id` int(11) DEFAULT NULL,
KEY `game_id_key` (`game_id`),
KEY `character_id_key` (`character_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
私の目的は、character_idのリストがすべてこのgame_idに存在するgame_idを取得することです。
データセットの例:
1, 1
1, 2
1, 3
2, 1
2, 2
3, 1
3, 4
character_idが1、2、および3であるgame_idを取得したいとします。効率的なクエリを作成するにはどうすればよいですか?私がこれまでに持っていた最良のアイデアは、テーブルをそれ自体に複数回結合することでしたが、これを行うにはもっと良い方法が必要だと思います。
ありがとう
編集:興味のある人にとっては、これが最良のクエリ時間を証明したので、私が使用した最後の解決策でした:
SELECT game_ID
FROM (
SELECT DISTINCT character_ID, game_ID
FROM games_Characters
) AS T
WHERE character_ID
IN ( 1, 2, 3 )
GROUP BY game_ID
HAVING COUNT( * ) =3