2016-06-01 1 views
1

Können sagen, ichWählen Sie nur ids mit Tags, die ein Array entspricht genau

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

Ich möchte Abfrage nur für ids, die die Tags haben (‚Äpfel‘, ‚Birnen‘ eine Tabelle mit IDs und Tags, Orangen'). So ist die gewünschte Ausgabe in diesem Fall nur id 2.

Nach der Lektüre ähnliche Beiträge ist, habe ich die folgende Abfrage-Anweisung in mysql versucht:

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

Aber das gibt sowohl id 2 & 3 und Ich möchte nur ID 2 in meinem Fall.

Antwort

2

Verwenden Sie einen CASE Ausdruck in der HAVING Klausel:

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

Ich denke, in 'MySQL' geschrieben werden kann ->' HAVING COUNT (Tags in (...) = 3 .. "keine Notwendigkeit für" CASE ", aber +1. – sagi

+0

Wird dies funktionieren, wenn eine ID hat zwei Äpfel, eine Birne und und eine Orange? – jarlh

+0

@jarlh, in diesem Fall müssen wir hinzufügen" DISTINCT ". –

Verwandte Themen