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?

War es hilfreich?

Lösung

SQL-Abfrage, die unterschiedliche Ergebnisse liefert, die

mehrere Spalten entsprechen

Ist 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 ) 
  )
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top