2012-12-11 11 views
10

Ich habe eine Querverweistabelle:Mysql - wählen IDs, die alle Tags entsprechen

ID | tag 
1 | 4 
1 | 5 
1 | 6 
2 | 4 
2 | 5 
2 | 8 
3 | 2 

Ich brauche die IDs auszuwählen, die alle von einer Reihe von Tags entsprechen. Zum Beispiel, wenn ich die Tags '4','5' erhalten würde, würde ich IDs '1','2' bekommen. Wenn ich die Tags '4','2' erhalten würde, würde ich keine IDs bekommen, weil es keine IDs gab, die alle der Tags entsprachen.

Auch wenn ich die Tags gegeben wurden '4','9' dann auch sollte ich keine resultierende IDs erhalten, weil eine Suche nach '9' in einem NULL Wert führen würde und daher keine IDs entsprechen alle die Tags.

Ich habe mir die letzten 2 Tage die Haare ausgezogen. Hoffentlich kann mir jemand helfen.

+0

Stichworte ' '4', '8'' geben sollte Sie 'ID = 2' als Ergebnis, sollten sie nicht? –

+0

Ja, Sie haben Recht. Mein Fehler - lass mich sehen, ob ich es beheben kann. – user1113531

+1

Siehe auch diese Frage, für mehr als 10 Möglichkeiten, dieses (allgemeine) Problem zu lösen: ** [Wie man SQL-Ergebnisse in eine Has-Many-Through-Beziehung filtert] (http://stackoverflow.com/questions/7364969/how -to-filter-sql-result-in-a-hat-viele-durch-relation) ** –

Antwort

17

Die Idee der Abfrage besteht darin, dass Sie die Anzahl der Datensätze an die Anzahl der Werte anpassen müssen, die Sie in der WHERE-Klausel angegeben haben.

SELECT ID 
FROM tableName 
WHERE tag IN (4, 8) 
GROUP BY ID 
HAVING COUNT(*) = 2 

wenn eindeutige Einschränkung nicht für jede ID auf Tag angegeben wurde, dann wird DISTINCT benötigt

SELECT ID 
FROM tableName 
WHERE tag IN (4, 8) 
GROUP BY ID 
HAVING COUNT(DISTINCT tag) = 2 
+0

Vielen Dank für die schnelle Antwort und für die Aufrechterhaltung meiner Gesundheit. Das funktioniert großartig! Es gibt eine eindeutige Einschränkung für die Tags, daher ist der erste Vorschlag perfekt. – user1113531

+0

du bist willkommen ': D' –

+0

Mein Held! Ich riss mir die Haare mit einer 20-Zeilen-Abfrage aus, alles was ich vermisste war dieser Teil, Kudos! – NaturalBornCamper

Verwandte Themen