MySQL - Differenzmengen
Mäx
- datenbank
0 Vinzenz Mai0 Mäx
Hi,
ich habe folgende Datenbankstruktur:
projekt_user
user_id | user | ...
profekt_ref_gruppe_user
id | user_id | gruppen_id
ref_kurs
id | user_id | kurs_id
So, jetzt möchte ich gerne alle User haben, die in einer bestimmten Gruppe (hier gruppen_id=4) sind und dem Kurs noch nicht zugeordnet sind.
Dazu wollte ich zunächst alle user der Gruppe auslesen und dann alle zugeordneten davon abziehen.
Leider klappt folgende Abfrage nicht:
(
SELECT projekt_user.user_id, user
FROM projekt_user
INNER JOIN projekt_ref_gruppe_user ON projekt_ref_gruppe_user.user_id = projekt_user.user_id
WHERE gruppen_id =4
)EXCEPT(
SELECT projekt_user.user_id, user
FROM projekt_user
INNER JOIN ref_kurs ON ref_kurs.user_id = projekt_user.user_id
INNER JOIN kurse ON kurse.kursnummer = ref_kurs.kurs_id
WHERE kursnummer =1
)
ORDER BY user
Jeweils einzeln funktionieren die Abfragen jedoch einwandfrei...
Fehlermeldung:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXCEPT ( SELECT ....
So, hoffe mal das ich nix wichtiges vergessen hab...
hoffe mir kann jmd helfen
schonmal Danke
Gruß mäx
Hallo
projekt_user
user_id | user | ...profekt_ref_gruppe_user
id | user_id | gruppen_idref_kurs
id | user_id | kurs_id
So, jetzt möchte ich gerne alle User haben, die in einer bestimmten Gruppe (hier gruppen_id=4) sind und dem Kurs noch nicht zugeordnet sind.
Fehlermeldung:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXCEPT ( SELECT ....
So, hoffe mal das ich nix wichtiges vergessen hab...
ja sicher, im Handbuch nachzuschauen, ob Dein DBMS den Operator EXCEPT kennt.
Dieser Operator kennt nicht einmal MySQL 6.0.
Gib mir
die Benutzer
die der Gruppe mit der id 4 angehören
und sich nicht in der Liste
der User des gewünschten Kurses befinden
hört sich nach einer Lösungsmöglichkeit an:
SELECT -- Gib mir
pu.user -- die Benutzer
FROM -- aus der Tabelle
project_user u -- project_user (mit Alias u)
INNER JOIN -- die mit der Tabelle
project_ref_gruppe_user pg -- project...user (mit Alias pg)
ON -- über die jeweiligen
u.user_id = pg.user_id -- Spalten user_id verknüpft sind,
WHERE -- wobei nur solche Benutzer interessieren,
pg.gruppen_id = 4 -- die der Gruppe 4 angehören
AND -- und n
pu.user_id NOT IN ( -- noch nicht in der
SELECT -- Liste
k.user_id -- der Benutzer auftreten,
FROM -- die
ref_kurs k -- einem
WHERE --
k.kurs_id = <gewünschter Wert> -- bestimmten Kurs zugeordnet sind.
)
Benötigt wegen des Subselects MySQL 4.1
Freundliche Grüße
Vinzenz
ahhh, danke für die schnelle Hilfe...
Mäx