我想提出这种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'
答案 0 :(得分:2)
试试这个。
SELECT a, ..., sum(if(b in ("foo", "bar"), 1, 0)) as fooBarCount FROM tb WHERE ... GROUP BY a HAVING fooBarCount < 1;