我想看看玩家A(9)和玩家B(14)是否曾进入同一轮,一轮有很多玩家参赛。这是轮次和球员之间多对多关系的中间表
table: entries
id | roundID | PlayerID
5 | 7 | 14
4 | 6 | 2
3 | 5 | 14
2 | 5 | 9
1 | 4 | 9
我希望明显返回ID 5,但这需要什么SQL语句?加入?
我可以通过玩家A和B玩的所有回合分别循环进行回合并在A的每次迭代中循环通过Bs回合来寻找匹配,但这似乎是不必要的代价。
答案 0 :(得分:1)
这样的事情应该有效,基本上只为指定的玩家计算每个roundID的所有玩家ID输入,并限制只显示具有倍数的玩家。
SELECT
roundID
FROM
entries
WHERE
PlayerID IN (9, 14)
GROUP BY
roundID
HAVING
COUNT(*)>1
答案 1 :(得分:0)
如果我正确理解了这个问题,那么像SELECT DISTINCT
这样简单的东西就可以了:
SELECT DISTINCT roundID
FROM entries
WHERE PlayerID IN (9, 14)
答案 2 :(得分:0)
对子查询使用INNER JOIN,如下所示
SELECT * FROM(SELECT * FROM tests WHERE player_id
=' 9')t9 INNER JOIN(SELECT * FROM tests WHERE player_id
=' 14' )t14 ON t9
。round_id
= t14
。round_id