sql-Abfrage mit Bedingung

Munscher

Grünschnabel
hey leute,

ich habe ein kleines problem. da ich noch nicht wirklich fit in sql bin frage ich euch
mal. mein problem ist: ich habe 3 tabellen (benutzer, benutzer2rollen und rollen).
es gibt verschiedene rollen (für mich sind nur die rollen_id 4 & 2 wichtig).
wenn nun ein benutzer die rolle 4 hat muss er auch die rolle 2 haben.
doch leider kommt es vor, das er manchmal nicht die rolle 2 hat.
nun möchte ich mir die benutzer bwz benutzer_id anzeigen die die rolle 4 hat, aber der die rolle 2 fehlt...
bissher habe ich noch keine funktionierende idee gehabt :)

bitte um hilfe

mfg

munscher
 
Hey,

Das wäre schon mal die SQL für die Selektion aller Benutzer mit der Rolle 4

PHP:
SELECT * FROM benutzer 
LEFT JOIN benutzer2rollen
ON benutzer.benutzer_id = benutzer2rollen.benutzer_id
LEFT JOIN rollen
ON rollen.rollen_id = benutzer2rollen.rollen_id
WHERE
rollen_id = 4

Ich weiß jetzt aber nicht, ob du einfach AND rollen_id != 2 ranhängen kannst;
dort wird er sicherlich einen Fehler ausgeben bzw. wäre der Ausdruck = 4 -> !=2 ja richtig :P

bo
 
vielen dank erstmal für deine antwort!
ich habe gerade ebend erfahren das es sich um eine informix datenbank handelt
und man sagte mir das dieser left join dort nicht funktioniert.
ich glaub ich hab mich vorhin ein wenig unverständlich ausgedrückt^^
eigentlich sind für mich nur die tabellen benutzer und benutzer2rolle wichtig.
daher findet doch meine hauptarbeit in der benutzer2rolle statt und wenn
die filterung dort erledigt ist kette ich die benutzer_ids aus benutzer2rolle an
die id aus benutzer an und lass mir den loginnamen anzeigen... ?

ach was ich noch vergessen habe zu sagen, die rollen werden einzeln für die benutzer angelegt...

benutzer_id | rollen_id
--------------------------------
1 | 4
1 | 3
1 | 2
2 | 5
2 | 2


ich hab zwar ne idee dies mit subselects umzusetzen, doch leider weiss ich nicht wie :)
 
Zuletzt bearbeitet:
also ich hab mein problem jetzt selber behoben und zwar mit der folgenden abfrage

Code:
select benutzer_id 
from benutzer2rolle 
where rolle_id=4
and
benutzer_id not in 
(select benutzer_id 
from benutzer2rolle
where rolle_id =2);
 
so wenn ich jetzt noch die benutzer_id aus benutzer2rolle mit den loginnamen aus benutzer verketten kann, dann wär ich glücklich :)
 
Versuche doch mal
Code:
select benutzer_id, benutzername 
from benutzer2rolle, benutzer 
where benutzer2rolle.rolle_id=4
and
benutzer2rolle.benutzer_id = benutzer.benutzer_id
and
benutzer2rolle.benutzer_id not in 
(select benutzer_id 
from benutzer2rolle
where rolle_id =2);
 
Zurück