Sören: [MySQL] unerklärliche Ausgabe

Beitrag lesen

id  rightid  groupid
  2   1        1
  3   2        1
  4   2        2

rightid 2 weist hier auf groupid 1 und 2. Ich hätte aber gerne die rightid, die nur auf groupid 2 weist.

Was weist hier worauf? Im MySQL-Sinne weist hier nix, so weise ist MySQL nicht ;-) Wenn Du nur den Datensatz haben willst, bei dem rightid 2 und groupid 2 ist, dann sollte das vielleicht als Bedingung in Deinem Statement untergebracht werden.

Ich dachte man kann sich das so gut vorstellen, aber gut dann versuch ichs anders zu erklären:
Die oben genannte Tabelle verbindet die Tabelle rights mit groups, mit rightid und groupid perspektivisch.
In meinem Beispiel ist rightid 2 mit groupid 1 und groupid 2 verbunden.
Nun möchte ich mit einem Query die rightid herausfinden, bei der die groupid 2 NUR EINE rightid verbindet.

Ein Beispiel:
groupid 2 ist mit rightid 2 verbunden, aber rightid 2 ist auch mit groupid 1 verbunden. groupid 2 soll aber eine alleinstehende rightid haben. Also die rightid die auf groupid 2 "zeigt" oder "weist" soll auf keine andere groupid zeigen.

Da es in meinem obigen Beispiel aber keine rightid gibt, die NUR auf groupid 2 zeigt, gibt der query also kein Ergebnis aus.

Hm,
abgesehen davon, das ich den ursprünglichen Select etwas umfangreich finde, wenn Du nur groupid = 2 haben willst sähe mein Code so aus.
... where groupid = 2
sonstige Bedingungen

Nein der Query würde mir rightid 2 ausgeben, rightid 2 "zeigt" aber auch auf groupid 1 und genau das möchte ich nicht.

Die einzige Möglichkeit die ich momentan sehe, ist dass ich die tabellen oben solange mit sich selbst verbinde wie es gleiche rightids gibt (also: user_permissions AS up1 JOIN user_permissions AS up2 ON up1.rightid = up2.rightid) und dann in einem where abfrage schaue ob eine groupid gleich 2 ist und die anderen ungleich aller anderen möglichen groupids sind.

Genau das hab ich mit meinem Query versucht:
SELECT up1.rightid FROM user_permissions AS up1 JOIN user_permissions AS up2 ON up1.rightid = up2.rightid WHERE up1.groupid = '2' AND up2.groupid <> '1' LIMIT 0,1

Doch leider nicht mit dem gewünschten Erfolg

Danke
Gruß Sören