我正在尝试查询以下示例,我需要选择所有为同一个团队(或同一人和其他人)玩过的人。例如
person teamName
1 maple leafs
1 rangers
2 red wings
3 rangers
3 avalanche
3 maple leafs
我正在尝试创建一个查询,其中显示“找到与玩家1在同一个队伍中玩过的所有玩家”。在上面的例子中,它应该返回玩家1和3.我有一些工作,即
select person from teams where teamName = 'maple leafs' intersect select person from teams where teamName = 'rangers';
然而,它的编码太硬(玩家可能被派往另一支球队)。我可以通过以下
获得参加过1队球员的球员名单create table temp as select teamName from teams where person = 1;
select * from temp join teams on temp.teamName = teams.teamName;
但是我不知道如何提取与玩家1在同一个团队中的人。我尝试过分组并且有条款,但是当我按人分组时,任何超过第一组的团队都会丢失,所以我有点卡住了。
感谢任何帮助。
答案 0 :(得分:0)
您可以像这样概括查询:
select person
from yourtablename
where teamname in (select teamname from yourtablename where person = 1)
group by person
having count(*) = (select count(*) from yourtablename where person = 1);
第一个子选择将团队限制为第1个人所在的人。但是,这仍然包括至少参加过一支球队而非全部球队的人。然后,HAVING子句确保查询返回的人员具有与人1相同的团队数量,这意味着他们已经在所有相同的团队中。