0

我在 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 来选择球队“约翰和米克”......

在这个 sqlfiddle http://sqlfiddle.com/#!2/27799/69中更新我可以选择团队 ID 2(“john and mick”),但它也会获得团队 ID 4(“john, mick and trev”)。需要将其过滤到 JUST 2。

4

2 回答 2

3
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,所以我不知道如何让玩家列表长度(the count(*) =2)是完全动态的,但你明白了。

于 2014-04-23T07:09:24.940 回答
0

我在团队 3 中添加了玩家 3 以创建所有可能的案例。这是我的回答:

SELECT t.*

FROM playersteams a,

     teams t

WHERE a.teamid = t.id

AND (SELECT COUNT(*) FROM playersteams c
     WHERE c.teamid = a.teamid
     AND c.playerid = 2) = 1

AND (SELECT COUNT(*) FROM playersteams c
     WHERE c.teamid = a.teamid
     AND c.playerid = 3) = 1

GROUP BY t.id, t.name

HAVING COUNT(a.playerid) = (SELECT COUNT(*) FROM players WHERE id IN (2,3));

SQL 小提琴:演示

于 2014-04-23T07:04:30.170 回答