1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Verständnisproblem bei GROUP_CONCAT

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von norbert_pdm, 26 September 2019.

  1. norbert_pdm

    norbert_pdm Benutzer

    Hallo, hallo und guten Abend....

    Ich hab mal wieder ne Frage ;-)

    Ich habe zwei Tabellen, welche durch eine m:n Beziehung miteinander verknüpft sind.
    Wenn ich eine 'normale' Abfrage mache, kommt das völlig korrekte Ergebnis.
    Code:
    SELECT
        gru.tbl_gruppe_name AS Name,
        gru.tbl_gruppe_ort AS Ort,
        gz.tbl_gz_wochentag AS Tag,
        gz.tbl_gz_start AS Anfang,
        ADDTIME(tbl_gz_start, tbl_gz_laenge) AS Ende
    FROM
        tbl_gruppe_has_tbl_gruppenzeit gruzeit
        LEFT JOIN tbl_gruppe gru ON gru.tbl_gruppe_ID = gruzeit.tbl_gruppe_ID
        LEFT JOIN tbl_gruppenzeit gz ON gz.tbl_gruppenzeit_ID = gruzeit.tbl_gruppenzeit_ID
    
    Ich möchte aber gerne alle passenden Einträge zusammen fassen. Dazu hab ich folgendes geschrieben:
    Code:
    SELECT
        gru.tbl_gruppe_name AS Name,
        gru.tbl_gruppe_ort AS Ort,
        GROUP_CONCAT(CONCAT(gz.tbl_gz_wochentag, ': ', gz.tbl_gz_start, ' - ', ADDTIME(tbl_gz_start, tbl_gz_laenge)) SEPARATOR ' | ') AS ZEIT
    FROM
        tbl_gruppe_has_tbl_gruppenzeit gruzeit
        LEFT JOIN tbl_gruppe gru ON gru.tbl_gruppe_ID = gruzeit.tbl_gruppe_ID
        LEFT JOIN tbl_gruppenzeit gz ON gz.tbl_gruppenzeit_ID = gruzeit.tbl_gruppenzeit_ID
    
    Das ist zumindest syntaktisch richtig... Aber es gibt nur eine einzige Zeile als Ausgabe...

    Ich seh nicht warum....?

    Habt ihr eine Idee...?

    VG, Norbert
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Es ist eben NICHT syntaktisch richtig, nur ist MySQL zu dumm, das zu erkennen.
     
  3. norbert_pdm

    norbert_pdm Benutzer

    Hmmm.... Ok.
    Wie wäre denn eine koreekte Abfrage von zB postgreSQL?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    GROUP_CONCAT ist eine Aggregatsfunktion. Wenn Du aggregierst, müssen alle Spalten im Result entweder aggregiert oder gruppiert sein.

    Code:
    test=*# select * from norbert_pdm ;
     name |   ort   | wochentag
    ------+---------+-----------
     Hans | Berlin  | Montag
     Hans | Berlin  | Dienstag
     Susi | Dresden | Mittwoch
    (3 rows)
    
    test=*# select name, ort, string_agg(wochentag,', ') from norbert_pdm ;
    FEHLER:  Spalte »norbert_pdm.name« muss in der GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden
    LINE 1: select name, ort, string_agg(wochentag,', ') from norbert_pd...
                   ^
    test=*# select name, ort, string_agg(wochentag,', ') from norbert_pdm group by name;
    FEHLER:  Spalte »norbert_pdm.ort« muss in der GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden
    LINE 1: select name, ort, string_agg(wochentag,', ') from norbert_pd...
                         ^
    test=*# select name, ort, string_agg(wochentag,', ') from norbert_pdm group by name, ort;
     name |   ort   |    string_agg   
    ------+---------+------------------
     Hans | Berlin  | Montag, Dienstag
     Susi | Dresden | Mittwoch
    (2 rows)
    
    test=*#
    
     
  5. norbert_pdm

    norbert_pdm Benutzer

    Hallo akretschmer,

    sorry, wenn ich jetzt mal kurz pathetisch werde... Du bist ein Datenbank-Gott :D:D

    Vielen Dank für deinen Hinweis und die Mühe.
    Ich kam jetzt endlich mal wieder dazu, an dem Projekt weiter zu arbeiten und der Tipp mit dem
    Code:
    GROUP BY
    war goldrichtig!!

    Also... Noch mal Danke!
    Und bis zur nächsten Frage!

    Norbert
     
    akretschmer gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden