-2

我想从一个包含“篮球”和“足球”两个程序行的表中选择所有 ID

给定这样的表:

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

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

id
1
2
4

3 回答 3

5

由于您要返回id同时具有 和 的值footballbasketball因此可以使用以下方法获取结果:

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

于 2013-04-24T13:35:26.693 回答
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。

于 2013-04-24T14:14:26.793 回答
-1

您可以使用INorOR语法来做到这一点:

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

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

顺便说一句,没有主键的表是非常糟糕的做法,没有办法索引这个表,所以性能会很差。

于 2013-04-24T13:40:06.583 回答