MySql Abfrage über viele-zu-viele-Beziehung
-
05-07-2019 - |
Frage
Ein sehr einfaches Beispiel für eine n: m-Beziehung, die mir ein Rätsel. Nehmen wir an, wir haben zwei Tabellen „Anlage“ und „Attribut“ und ein weiterer Tisch zwischen ihnen halten ihre Beziehung mit ihren IDs:
Plant--------hasAttribute--------Attribute
P1 | A1
P1 | A2
P1 | A3
P2 | A1
P2 | A2
P3 | A2
P3 | A3
So, Plant 1 hat Attribute 1,2 und 3. Anlage 2 Attribute 1 und 2 und Anlage 3 hat Attribute 2 und 3 hat. Nun, in einer einzigen Abfrage, wie kann ich zum Beispiel alle Pflanzen, das Attribut 2 und 3 haben? Das Ergebnis sollte P1 und P3 zurück, weil sie beide Attribute 2 und 3 haben. Ich habe versucht, Gewerkschaft, aber das gibt mir P2 als Folge auch ... irgendwelche Ideen?
Lösung
SQL-Abfrage, die unterschiedliche Ergebnisse liefert, die
mehrere Spalten entsprechenIst das, was Sie suchen?
Andere Tipps
Diese Abfrage Struktur vermeidet die Notwendigkeit für eine bestimmte Klausel (sofern keine doppelten Datensätze in der Auflösungstabelle sind).
SELECT p.PlantID
FROM
Plant p INNER JOIN PlantAttribute pa
ON p.PlantID = pa.PlantID AND pa.AttributeID = 1
INNER JOIN PlantAttribute pa2
ON p.PlantID = pa2.PlantID AND pa2.AttributeID = 2;
select * from Plants p where 2 = (
select count(*) from HasPlants h
where h.pid = p.id and h.aid in ( a2, a3 )
)