如何按结果按组筛选组

时间:2014-07-10 14:23:54

标签: mysql

我想提出这种sql请求(这不起作用):

SELECT a, ... FROM tb WHERE ... GROUP BY a HAVING INTERSECTION(b, ('foo', 'bar')) is empty

我不知道怎么做' INTERSECTION(b,(' foo',' bar'))是空的'部分。我想不匹配任何一组' b'与固定集相交的字段(此处(' foo',' bar'))为空。到目前为止我找到的唯一解决方案是:

SELECT a, ... FROM tb WHERE ... and a not in (select a from tb where b in ('foo', 'bar')) GROUP BY a

但是这个请求很慢(表有+ 2M行)。有没有更好的方法来做同样的事情?我想我可以使用HAVING过滤结果,但我不知道如何。

编辑:添加示例:

例如,如果我有:

a    b
1    'foo'
1    'test'
2    'test'
3    'bar'

只应返回a = 2行,因为其中一个= 1包含' foo'

1 个答案:

答案 0 :(得分:2)

试试这个。

SELECT a, ..., sum(if(b in ("foo", "bar"), 1, 0)) as fooBarCount FROM tb WHERE ... GROUP BY a HAVING fooBarCount < 1;

这是SQLfiddle