SQL Mehrfachzuordnung

LotruS

Lt. Junior Grade
Registriert
Sep. 2007
Beiträge
281
Hallo zusammen,

ich habe ein Problem bei der Darstellung von einer Abfrage bei einer Mehrfachzuordung.

Tabellen:

Produkte
ProduktID|Produktname
---
11|Prod1
12|Prod2

Operatoren
OperatorID|Operatorname
---
21|MaxMuster
22|PeterLustig

Zuordung
ProduktID|OperatorID
---
11|21
11|22
12|21

Das Problem: Wenn ich jetzt eine Abfrage darauf mache, bekomme ich zuviel zurück:

Abfrage
Produktname|Operatorname
---
Prod1|MaxMuster
Prod1|PeterLustig
Prod2|MaxMuster

Ich hätte lieber:

Abfrage
Produktname|Operatornamen
---
Prod1|MaxMuster, PeterLustig
Prod2|MaxMuster

Kann mir jemand sagen, wie das geht?

Wenn mehr Infos benötigt werden, ... an mir solls nicht liegen.

Vielen Dank im Voraus!
 
Also erstens fehlt mir hier spontan der Schlüssel über welchen du den Join der beiden Tabellen durchführst und zweitens, geht das was du da vorhast mit SQL nur bedingt. Je nach DBMS lässt sich die gewünscht Ausgabe mit einer entsprechenden Funktion bewerkstelligen. Diese Funktion müsstest du aber erst schreiben und anlegen.

Alternativ kannst du die Ausgabe auch mit der verwendeten Programmier- und/oder Scriptsprache anpassen. Dazu sortierst du via SQL einfach nach Produktname und machst solange ein concat auf Operatorname + Komma wie das aktuelle dem vorherigen Produkt entspricht.
 
Danke für die fixe Antwort!

Wenn ich das mache:

GROUP_CONCAT(DISTINCT Operatorname DESC SEPARATOR ' ') AS [Operators]

Dann kommt der Fehler Incorrect syntax near the keyword 'DESC'.

Ich habe MSSQL.

Ist nun die Syntax falsch oder das fehlen von MySQL?


Ergänzung:

den Join mach ich mit LEFT OUTER JOIN... also einmal die Zuordnung und dann darüber die Operatoren
 
Zuletzt bearbeitet:
Ne das geht unter MSSQL so nicht. Keine Ahnung, ob es da eine einfache Lösung gibt. Ich würde es dann, wie SC6 vorschlägt, in der Programmiersprache machen. Oder google mal nach "MSSQL group_concat", vlt findet sich was.
 
Vielen Dank für die Lösungsvorschläge. Im Programm eine Änderung vornehmen, kam nicht in Frage.
Ich habe das Problem so gelößt:

LEFT OUTER JOIN (SELECT ID, [Operator Names] = REPLACE
((SELECT T_operations_contact.first_name + '_' + T_operations_contact.last_name AS [data()]
FROM T_softwareproduct
LEFT OUTER JOIN T_softwareproduct_has_T_operations_contact ON T_softwareproduct.ID = T_softwareproduct_has_T_operations_contact.T_softwareproduct_ID
LEFT OUTER JOIN T_operations_contact ON T_softwareproduct_has_T_operations_contact.T_operations_contact_ID = T_operations_contact.ID
WHERE T_softwareproduct.ID = A.ID
ORDER BY T_softwareproduct.ID FOR XML PATH('')), ' ', ', ')
FROM
dbo.T_softwareproduct A
GROUP BY
ID
) AS temp_operator ON T_softwareproduct.ID = temp_operator.ID

Wer was damit anfangen kann, dem sei damit geholfen ;)
 
Zurück
Oben