如何选择具有来自集合中所有值的行的id

时间:2013-04-24 13:32:48

标签: sql

我想从一个表中选择所有Id,这两个程序的'篮球'和'足球'

都有行

给出一个这样的表:

Id  program
1   basketball
2   football
3   basketball
2   basketball
1   football
4   football
5   basketball

我怎样才能得到这样的结果:

id
1
2

3 个答案:

答案 0 :(得分:5)

由于您要返回同时包含idfootball值的basketball,您可以使用以下内容获取结果:

select id
from yt
where program in ('basketball', 'football')
group by id
having count(distinct program) = 2;

请参阅SQL Fiddle with Demo

也可以通过多次加入你的桌子来完成:

select t1.id
from yt t1
inner join yt t2
  on t1.id = t2.id
where t1.program = 'basketball'
  and t2.program = 'football';

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

我认为聚合是最常用的方法:

select id
from table
group by id
having sum(case when program = 'Football' then 1 else 0 end) > 0 and
       sum(case when program = 'Basketball' then 1 else 0 end) > 0

sum()语句分别计算具有“足球”和“篮球”的行数。如果存在,则该数字大于0.

答案 2 :(得分:-1)

您可以使用INOR语法执行此操作:

SELECT id
FROM table
WHERE program = 'basketball'
OR program = 'football';

如果您只想获得前两个结果,请将LIMIT 2添加到最后。

顺便说一句,拥有没有主键的表是非常糟糕的做法,没有办法对此表进行索引,因此性能会非常糟糕。