2016-06-01 1 views
1

私はタグのみ(「りんご」、「梨」を持っているのIDを照会したいのIDとタグ配列が正確に

id | tags  
1 | apples 
1 | pears 
2 | apples 
2 | pears 
2 | oranges 
3 | apples 
3 | pears 
3 | oranges 
3 | lemons 

のテーブルを持っていると言うことができます一致するタグ付きのIDのみを選択して、オレンジ')。 だからこの場合、所望の出力は、他の同様の記事を読んだ後にのみID 2.

ですが、私はMySQLで、次のクエリステートメント試してみました:

SELECT 
    id 
FROM table 
WHERE tags IN ('apples', 'pears', 'oranges') 
GROUP BY id 
HAVING COUNT(DISTINCT tags)=3; 

をしかし、これは、両方のID 2 & 3を返し、私は私の場合、ID2だけを望んでいます。

答えて

2

HAVING句のCASEの式を使用します私は `それを書き込むことができますMySQL`で考える

SELECT id 
FROM t 
GROUP BY id 
HAVING 
    COUNT(DISTINCT CASE WHEN tags IN('apples', 'pears', 'oranges') THEN tags END)=3 
    AND COUNT(DISTINCT CASE WHEN tags NOT IN('apples', 'pears', 'oranges') THEN tags END) = 0; 

ONLINE DEMO

+0

を - =>' HAVING COUNT(タグで(...) 3 .. 'CASE'の必要はありませんが、+1。 – sagi

+0

IDが2つのリンゴ、ナシ、オレンジを持っている場合は – jarlh

+0

@jarlhです。この場合、DISTINCTを追加する必要があります。 –

関連する問題