stryga42
Benutzer
- Beiträge
- 7
Ich habe eine n zu m Relation, sagen wir mal eine Tabelle image, die Bilder enthält, eine Tabelle label, die Schlagworte enthält, und eine img_lab, die die PKs von image und label miteinander verknüpft. Einem Bild dürfen 0..n label zugeordnet sein, sogar derselbe label mehrfach. (Sinnvoll, weil img_lab noch Zusatzattribute enthält - z.B. wo im Bild das Schlagwort zutrifft)
Ich will jetzt ein SELECT bauen, das nach images sucht, die eine bestimmte Kombination von labels tragen. Ich brauche zuerst mal AND verknüpfte labels. (von den labels sind schon die PKs bekannt, ich benötige also keinen JOIN auf die label Tabelle - angenommen die label PKs sind 42 und 99)
Fragen:
Danke!
Ich will jetzt ein SELECT bauen, das nach images sucht, die eine bestimmte Kombination von labels tragen. Ich brauche zuerst mal AND verknüpfte labels. (von den labels sind schon die PKs bekannt, ich benötige also keinen JOIN auf die label Tabelle - angenommen die label PKs sind 42 und 99)
Das funktioniert aber nur solange kein gesuchtes Schlagwort einem Bild mehrfach zugeordnet ist.SELECT img.pk FROM image img INNER JOIN img_lab ixl ON img.pk=ixl.image WHERE ixl.label IN (42, 99) GROUP BY img.pk HAVING COUNT(1) = 2
Fragen:
- Ist das grundsätzlich der richtige Zugang?
- Gibt es eine Funktion, die ich in der HAVING clause verwenden kann, und die nur überprüft, ob bestimmte Werte in der GROUP enthalten sind?
- Oder habt ihr eine andere Idee?
Danke!