我在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;
我的目标是获得一个 game_id,其中 character_ids 的列表都存在于这个 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