SQL-Abfrage stimmt nicht (Group_Concat)
Julia
- datenbank
Hi,
ich habe 3 Tabellen:
Tabelle "Auftraege"
--------------------
AuftragID
Anforderung
...
Tabelle "Verantwortlicher"
--------------------------
ID
AuftragID
VerantwortlicherID
Tabelle "Benutzer"
------------------
BenutzerID
NName
VName
Es handelt sich um einen vereinfachten Ausschnitt aus einer Auftragsverwaltung. Jeder neue Auftrag kann an mehrere Verantwortlichen vergeben werden. Über die AuftragID besteht zwischen Auftraege und Verantwortlicher eine Verbindung; den Namen des Verantwortlichen erhält man über die Verknüpfung VerantwortlicherID mit BenutzerID.
Ich möchte nun eine Abfrage haben, welcher Benutzer mit Namen welchen Auftrag bearbeitet. Meine SQL-Abfrage sah wie folgt aus:
SELECT Auftraege.AuftragID,
GROUP_CONCAT(CONCAT(VA.VName, ' ', VA.NName) SEPARATOR ', ') AS Verantwortlicher
FROM Auftraege
LET JOIN Auftrag_Verantwortlicher on Auftrag_Verantwortlicher.AuftragID = Auftraege.AuftragID
LEFT JOIN Benutzer AS VA ON VA.BenutzerID = Auftrag_Verantwortlicher.VerantwortlicherID
GROUP BY Auftraege.AuftragID
In der Ausgabe steht jetzt z.B.
AuftragID | Verantwortlicher
------------------------------------------------
67 | Manuela Mustermann, Klaus Mustermann
68 | Manuela Mustermann
69 | Klaus Mustermann
So weit, so gut. Jetzt komme ich natürlich an den Punkt, wo ich Manuela Mustermann nur ihre eigenen Aufträge anzeigen will, aber gleichzeitig auch anzeigen, daß sie den Auftrag zusammen mit jemand anders bearbeitet.
Sämtliche Einschränkungen wie "WHERE VA.BenutzerID = 5" führen leider zu folgendem Ergebnis:
AuftragID | Verantwortlicher
------------------------------------------------
67 | Manuela Mustermann
68 | Manuela Mustermann
Ich hätte natürlich gerne:
AuftragID | Verantwortlicher
------------------------------------------------
67 | Manuela Mustermann, Klaus Mustermann
68 | Manuela Mustermann
Hat jemand eine Idee?
Viele Grüße vom Huhn
Moin!
Sämtliche Einschränkungen wie "WHERE VA.BenutzerID = 5" führen leider zu folgendem Ergebnis:
Die WHERE-Klausel filtert, bevor GROUP BY angewandt wird. Wenn du die Benutzer-ID auf 5 einschränkst, kommt natürlich kein anderer Mitarbeiter mehr "durch".
HAVING filtert NACH dem GROUP BY. Damit kannst du das Ergebnis der Gruppierung einschränken - allerdings ist das natürlich ein wenig komplizierter, weil du ja keine alleinstehende Benutzer-ID mehr hast.
- Sven Rautenberg