我想从一个包含“篮球”和“足球”两个程序行的表中选择所有 ID
给定这样的表:
Id program
1 basketball
2 football
3 basketball
2 basketball
1 football
4 football
5 basketball
我怎样才能得到这样的结果:
id
1
2
我想从一个包含“篮球”和“足球”两个程序行的表中选择所有 ID
给定这样的表:
Id program
1 basketball
2 football
3 basketball
2 basketball
1 football
4 football
5 basketball
我怎样才能得到这样的结果:
id
1
2
由于您要返回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';
我认为聚合是最通用的方法:
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。
您可以使用IN
orOR
语法来做到这一点:
SELECT id
FROM table
WHERE program = 'basketball'
OR program = 'football';
如果您只想获得前两个结果,请添加LIMIT 2
到最后。
顺便说一句,没有主键的表是非常糟糕的做法,没有办法索引这个表,所以性能会很差。