我想从一个表中选择所有Id,这两个程序的'篮球'和'足球'
都有行给出一个这样的表:
Id program
1 basketball
2 football
3 basketball
2 basketball
1 football
4 football
5 basketball
我怎样才能得到这样的结果:
id
1
2
答案 0 :(得分:5)
由于您要返回同时包含id
和football
值的basketball
,您可以使用以下内容获取结果:
select id
from yt
where program in ('basketball', 'football')
group by id
having count(distinct program) = 2;
也可以通过多次加入你的桌子来完成:
select t1.id
from yt t1
inner join yt t2
on t1.id = t2.id
where t1.program = 'basketball'
and t2.program = 'football';
答案 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)
您可以使用IN
或OR
语法执行此操作:
SELECT id
FROM table
WHERE program = 'basketball'
OR program = 'football';
如果您只想获得前两个结果,请将LIMIT 2
添加到最后。
顺便说一句,拥有没有主键的表是非常糟糕的做法,没有办法对此表进行索引,因此性能会非常糟糕。