我想看看玩家A(9)和玩家B(14)是否都进入过同一轮,一轮有很多玩家进入。这是回合和玩家之间多对多关系的中间表
table: entries
id | roundID | PlayerID
5 | 7 | 14
4 | 6 | 2
3 | 5 | 14
2 | 5 | 9
1 | 4 | 9
很明显,我希望返回第5轮,但这需要什么SQL语句?加入?
我可以通过让玩家A和B分别进行所有回合的A回合和B回合来寻找匹配,但这似乎不必要地昂贵。
类似的操作应该有效,基本上只为指定的玩家计算每个回合ID的所有玩家ID条目,并限制只显示具有倍数的条目。
SELECT
roundID
FROM
entries
WHERE
PlayerID IN (9, 14)
GROUP BY
roundID
HAVING
COUNT(*)>1
如果我正确理解了这个问题,像SELECT DISTINCT
这样简单的东西就会在这里起作用:
SELECT DISTINCT roundID
FROM entries
WHERE PlayerID IN (9, 14)
将INNER JOIN与子查询一起使用,如下所示
在t9
上选择*FROM(从player_id
='9'的测试中选择*FRON)t9 INNER JOIN(从player_id
='14'的测试中选*FROM)t14。round_id
=t14
。round_id