从多值属性中选择元组

时间:2015-04-03 18:45:33

标签: sql sqlite multivalue

我正在尝试查询以下示例,我需要选择所有为同一个团队(或同一人和其他人)玩过的人。例如

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在同一个团队中的人。我尝试过分组并且有条款,但是当我按人分组时,任何超过第一组的团队都会丢失,所以我有点卡住了。

感谢任何帮助。

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相同的团队数量,这意味着他们已经在所有相同的团队中。