2012-01-05 54 views
2

我一直在追逐我的尾巴在这一个。我有一张桌子(这个例子很简单)。试图找到基于一组记录,其中有一个100%的匹配mysql的单个记录

LogID (Primary Key) 
UserID (Foreign Key) 
Skipped (Tiny Int, default 0) can be 1 or 0 

这是一个一对多的关系,这是表中“多”在此加入

用户即:约翰史密斯可能有10用户ID的每条记录可以有一个跳过= 1或Skipped = 0,具体取决于特定记录的实例。

下面是一个简单的断点数据

1 | 10 | 1 
2 | 10 | 0 
3 | 10 | 1 
4 | 10 | 0 

下来所以这个用户是在那里的4倍。 2记录显示跳过(1),2记录显示未跳过(0)。

我需要创建一个查询来查找跳过100%的用户。所以看起来像这样的人:

1 | 11 | 1 
2 | 11 | 1 
3 | 11 | 1 
4 | 11 | 1 

如果被跳过是0我不希望那个用户。用户可以混合使用(跳过是和否),所以我需要找到仅100%跳过的用户。我将需要它通过UserID分组或至少DISTINCT处理它发现时,所以我得到单个用户(没有dups)。我一直在关注GROUP BY,HAVINGS,COUNT和SUM以解决这个问题,但是我一直在抓住查询的100%部分。

我使用MySQL 56年5月1日

任何建议都非常赞赏。

谢谢! 韩纸

回答

3
select userid 
from table 
group by userid 
having count(userid) = sum(if(skipped = 1,1,0)) 
+0

'总和(跳过)'就足够了,不是吗? – fge 2012-01-05 22:10:07

+1

是的,在这种情况下,跳过的可以只有一个布尔值,你是对的。 ;) – 2012-01-05 22:16:05

+0

伟大的解决方案。谢谢! – hanji 2012-01-05 22:21:48

0
select distinct userid 
from table 
where userid not in 
(select userid from table where skipped = 0) 
+1

我相信你会需要一个独特的在那里... OP说:“我将需要它分组UserID或至少DISTINCT处理它发现时,所以我得到单个用户(没有dups) “。 – saritonin 2012-01-05 23:29:53

+0

已更改。起初这个要求并不存在 – 2012-01-06 07:40:33