如何选择的ID有一组所有值的行
我想从有两个节目“篮球”和“足球”如何选择的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';
+1不错的查询,不错的演示和快速! – Bohemian 2013-04-24 13:38:56
您可以IN
或OR
语法做到这一点:
SELECT id
FROM table
WHERE program = 'basketball'
OR program = 'football';
如果你想只能得到前两个结果,最后加LIMIT 2
。
顺便说一句,如果没有主键的表是非常糟糕的做法,那么就没有办法为这个表编制索引,因此性能会很差。
我不认为这是OP正在寻找... – 2013-04-24 13:41:35
他可能正在寻找每个“程序”的第一个不同的结果。说实话,我认为他应该修正他的表格,而不是重复'id's,这对于学习SQL而言可能比如何选择不同的值(可以很容易地谷歌搜索)更重要。 – 2013-04-24 13:43:43
我觉得聚集是这个最普及的方法:
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-24 17:06:12
SELECT 1 UNION SELECT 2 ;-) – Strawberry 2013-04-24 13:41:05
请问 - 您的ID有什么问题?为什么有重复的价值观? – 2013-04-24 13:41:55
我猜他们不是主键。 – 2013-04-24 13:42:41