Mysql查询。获取查询的最佳方式

时间:2014-10-07 21:05:20

标签: mysql sql

field1|field2 51301 | FOO 51301 | FOO 51302 | FOO 51302 | BAR 51302 | FOOBAR 51302 | FOOBAR 51303 | BAR 51303 | BAR

Field2可能包含FOO,BAR或FOOBAR。 Mysql查询获取所有field1如果任何时间点field2有FOO和BAR和FOOBAR。换句话说,如果field2已设置为FOO,BAR和FOOBAR,请给我field1。订单并不重要。

select field1 from mytable_audit group by id, field2 having field2 in ('FOO', 'BAR', 'FOOBAR');

但是得到结果要么field2要么是FOO,要么是BAR,要么是FOOBAR。如果field2在某个时间点是FOO,BAR和FOOBAR,有没有办法得到结果。

2 个答案:

答案 0 :(得分:1)

这是你想要的吗?

select field1
from table t
where field2 in ('FOO', 'FOOBAR', 'BAR')
group by field1
having count(distinct field2) = 3;

答案 1 :(得分:0)

以下是获取满足规范的field1值列表的一种方法:

SELECT t.field1
  FROM mytable t
 GROUP BY t.field1
HAVING GROUP_CONCAT(DISTINCT 
         CASE WHEN t.field2 IN ('BAR','FOO','FOOBAR') 
              THEN t.field2 
              ELSE NULL
         END ORDER BY t.field2) = 'BAR,FOO,FOOBAR'