我在 SQL 数据库中的两个表上有一个 M2M 关系,如下所示:
Players
-------
Name
ID
Teams
------
Name
ID
PlayersTeams
------
PlayerID
TeamID
一支球队由一名或多名球员组成。
我想查询给定球员 ID 的球队,并只返回包含那些球员的球队,不多也不少。因此,查询拥有球员 (1,2,3) 的球队只会返回拥有球员 1,2,3 的球队,而不会返回拥有球员 1,2,3,4 的球队。
这在单个查询中可能吗?
我有一个 sqlfiddle,我想在这里解决它:http://sqlfiddle.com/#!2/27799/8
在该示例中,我希望能够通过查询玩家 ID 1 和 2 来选择团队“john and mick”...
更新 在这个 sqlfiddle http://sqlfiddle.com/#!2/27799/69我可以选择团队 ID 2(“john 和 mick”),但它也会获得团队 ID 4(“john、mick 和 trev”)。需要将其过滤到仅 2 个。
最佳答案
select TeamId
from PlayersTeams
group by TeamId
having count(*) = sum(case when playerid in (1,2) then 1 else 0 end)
and count(*) = 2
不熟悉 mysql,所以我不知道如何获取玩家列表长度(count(*) =2
)以使其完全动态,但您明白了。
关于sql - 在多对多中选择与精确键的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23236204/