2014-10-07 47 views
1

field1|field2 51301 | FOO 51301 | FOO 51302 | FOO 51302 | BAR 51302 | FOOBAR 51302 | FOOBAR 51303 | BAR 51303 | BAR Mysql查詢。獲取查詢的最佳方法

Field2可能包含FOO,BAR或FOOBAR。如果任何時間點field2有FOO和BAR和FOOBAR,則通過Mysql查詢獲取所有field1。換句話說,如果field2已經設置爲FOO,BAR和FOOBAR,那麼給我field1。訂單並不重要。

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

但它得到結果要麼場2或者是FOO,BAR或FOOBAR。如果field2在某個時間點是FOO和BAR和FOOBAR,有什麼方法可以得到結果嗎?

+0

我建議你做一個嘗試,那麼讓我們瞭解您嘗試和具體是什麼地方出了錯。 – showdev 2014-10-07 21:07:04

+0

我確實從mytable_audit group by id中選擇了field1,field2在('FOO','BAR','FOOBAR')中有field2。 – Tauquir 2014-10-07 21:12:39

+0

更新了問題。 – Tauquir 2014-10-07 21:14:59

回答

1

這是你想要的嗎?

select field1 
from table t 
where field2 in ('FOO', 'FOOBAR', 'BAR') 
group by field1 
having count(distinct field2) = 3; 
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'