sql - 在多对多中选择与精确键的关系

标签 sql postgresql m2m

我在 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/

相关文章:

django - cookie-cutter django nginx connect() 失败 (111 : Connection refused) while connecting to upstream,

postgresql - Postgres 解释计划不同

我们可以在 BG96 LwM2M 实现中添加自定义对象吗?

C# - 将数据文件加载到 mysql - fatal error

如果列的组合(允许重复)是唯一的,则 MySQL 仅插入新行

php - 为什么列别名在 Doctrine 中不起作用?

sql - Postgresql 更新左连接

java - Observe.onResponse 中的 objectID 始终为 0

java - 使用 Select...Where In 保留顺序并锁定行