ich zwei Tabellen in SQL haben, eine mit einem Projekt und einer mit Kategorien, die Projekte gehören, dh die würde in etwa wie folgt aussehen JOIN:SQL-Filterung durch mehrere Elemente in der gleichen Spalte
Project | Category
--------+---------
Foo | Apple
Foo | Banana
Foo | Carrot
Bar | Apple
Bar | Carrot
Qux | Apple
Qux | Banana
(Die Zeichenfolgen werden natürlich durch IDs aus einem höheren Normalformat ersetzt. Aber Sie erhalten den Punkt hier.)
Was ich tun möchte, ist Filtern ermöglichen, so dass Benutzer eine beliebige Anzahl von Kategorien auswählen können und die Ergebnisse nach Elementen gefiltert werden Mitglieder aller ausgewählten Kategorien. Wenn ein Benutzer beispielsweise die Kategorien "Apple" und "Banana" auswählt, werden die Projekte "Foo" und "Qux" angezeigt. Wenn ein Benutzer die Kategorien "Apple", "Banana" und "Carrot" auswählt, wird nur das "Foo" -Projekt angezeigt.
Das erste, was ich ausprobiert habe, war ein einfaches SELECT DISTINCT-Projekt VON ... WHERE Kategorie = 'Apple' UND Kategorie = 'Banane', aber das funktioniert natürlich nicht, da Apple und Banana in derselben Spalte erscheinen in zwei verschiedenen Reihen für jedes gemeinsame Projekt.
GROUP BY und HAVING machen mir nichts, also sag mir: Gibt es einen offensichtlichen Weg, dies zu tun, den ich vermisse, oder ist es wirklich so kompliziert, dass ich darauf zurückgreifen muss? rekursive Joins?
Dies ist übrigens in PostgreSQL, aber natürlich ist Standard-SQL-Code immer vorzuziehen, wenn möglich.
Werfen Sie einen Blick auf diese Frage: http://stackoverflow.com/questions/1242223/mysql-find-rows-matching-all-rows-from-joined-table Nicht ein genaues Duplikat, aber ziemlich nah – ChssPly76