ChrisB: [MySQL] m:n Relation. Eine id mit bestimmten Kriterien bestimmen

Beitrag lesen

Hi,

Mein query soll mir nur EINE rightid zurückgeben, die mit groupid 1 und 2 nicht aber mit 3 und 4 (also alle anderen) verbunden ist. Das Ergbnis wäre in diesem Fall für rightid 2.

Mein query soll mir nur EINE rightid zurückgeben, die mit groupid 2 nicht aber mit 1, 3 und 4 (also alle anderen) verbunden ist. Das Ergbnis wäre in diesem Fall für rightid 4.

Mein query soll mir nur EINE rightid zurückgeben, die mit groupid 3 und 4 nicht aber mit 1 und 2 (also alle anderen) verbunden ist. Das Ergbnis wäre in diesem Fall für rightid NULL.

Wie lässt sich das realisieren?

Mit EINE meinst du, dass du jeweils nur an einer rightid interessiert bist, selbst wenn mehrere die Bedingung erfüllen sollten? Das liesse sich zwar mittels LIMIT leicht machen - allerdings solltest du dann auch noch eine Sortierung definieren, um reproduzierbare Ergebnisse zu bekommen.

Das Vorhaben lässt sich umsetzen, in dem du mittels IF entscheidest, ob die groupid eine der geforderten ist. Wenn ja, den Wert 1 zurückgeben, wenn nein den Wert -1.
Diese Werte aufsummieren (nach rightid gruppiert), und dann per HAVING nur die Datensätze auswählen, bei denen diese Summe der Anzahl der geforderten groupids entspricht. (Im ersten Beispiel also 2, im zweiten 1.)

Nur das dritte Beispiel wird dadurch leicht von der Anforderung abweichend behandelt - du bekommst damit keinen Datensatz mit rightid = NULL zurück, sondern einfach keine Datensätze. Das sollte m.E. vermutlich die Applikation selber entsprechend handeln können.

MfG ChrisB

--
“Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]