Mein Blog

Interessante mySQL Funktion Group_Concat

800px-SQLOft ist man wirklich genötigt die unmöglichsten Funktionen zu “erfinden” oder freut sich, wenn diese bereits existieren. 🙂

In Datenbanken kann häufig das Problem auftreten dass man gern dort bereits Daten gruppieren möchte… aber oftmals kann man dafür nur Skalarwertfunktionen wie avg, max oder min nutzen. In mySQL gibt es gerade für Strings noch die Funktion group_concat.

Stellt euch mal vor, ihr habt 3 Zeilen in der DB und wollt die Spalte name z.b. gern Komma-getrennt in eurer Abfrage haben.. 😉

Tabelle 1 sind die Nutzer, Tabelle 2 sind die Straße die sie besitzen und die Ausgabe zeigt was wir wollen.

Erreichen kann man das in mySQL nun damit:

SELECT t1.ID, t1.Name, GROUP_CONCAT( t2.street
ORDER BY t1.ID DESC
SEPARATOR ', ' ) AS 'Straße'
FROM tab1 t1
INNER JOIN tab2 t2 ON ( t1.ID = t2.FK )
GROUP BY t1.ID, t1.Name
LIMIT 0 , 30

In TSQL gibt es solche eine Funktion natürlich nicht… 😉 – aber man kann diese wie folgt simulieren:

SELECT t1.ID, t1.name, 
STUFF(
   (
    SELECT ',' + t3.street  FROM tab2 t3 
     WHERE t3.FK = t1.ID FOR XML PATH ('') 
   ) , 1, 1,'') as Street

FROM tab1 t1
INNER JOIN tab2 t2 ON ( t1.ID = t2.FK )

 

Die mobile Version verlassen