snakey
Goto Top

MySQL Abfrage: Bei mehreren gleichen Schlüsseln alle Werte ausgeben

Moin,

erstmal sorry für den etwas verwirrenden Titel, allerdings ist das Problem etwas komplizierter und ich kann es nicht gut "kurz" zusammenfassen. Nun zu meinem eigentlichen Problem:

Ich habe in einer MySQL Datenbank zwei relevante Tabellen für dieses Problem (es handelt sich hierbei um eine fiktive Datenbank, da die eigentliche datenschutzrelevante Daten hat)
Tabelle1:
ID - Musiktitel - Album - usw

Tabelle2:
ID - Genre

Die beiden Tabellen sind über die ID eindeutig verknüpft. Jetzt kann in Tabelle 2 eine ID mehrmals vorkommen, da ein Musiktitel mehrere Genres haben kann. Wie bekomme ich es jetzt hin, dass meine Ausgabe am Ende wie folgt aussieht:

ID - Musiktitel - ... - Genre 1 - Genre 2- ... Genre 5

Die Tabelle umbauen geht leider nicht, da dies vom Hersteller so vorgegeben ist. Aktuell gebe ich immer 2 Titel aus, über min / max. Dies hilft ein bisschen ist aber nicht wirklich das Beste:

select
ID,
Musiktitel,
(select min(Genre) from Tabelle2 where tabelle1.ID=Tabelle2.id) as MinGenre,
case
when ((select min(Genre) from Tabelle2 where tabelle1.id=tabelle2.id)!=(select max(Genre) from tabelle2 where tabelle1.id=tabelle2.id))
then (select max(Genre) from tabelle2 where tabelle1.id=tabelle2.id)
else '---'  
end as MaxGenre

from Tabelle1

Ausgabe davon ist dementsprechend:
ID - Musiktitel - MinGenre - MaxGenre

Hat da jemand eine Idee bzw. ist dies überhaupt umsetzbar?

Content-ID: 667206

Url: https://administrator.de/forum/mysql-abfrage-bei-mehreren-gleichen-schluesseln-alle-werte-ausgeben-667206.html

Ausgedruckt am: 17.04.2025 um 04:04 Uhr

BirdyB
Lösung BirdyB 31.05.2021 um 16:24:47 Uhr
Goto Top
Moin,

vielleicht hilft dir GROUP_CONCAT (https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#functio ..)
Ich konnte es leider gerade auf die Schnelle nicht testen, aber damit sollte es sich abbilden lassen.

VG
Snakey
Snakey 31.05.2021 um 16:49:31 Uhr
Goto Top
Das klingt gut face-smile werde es die Woche mal ausprobieren und eine Rückmeldung geben face-smile
148121
148121 31.05.2021 aktualisiert um 17:13:34 Uhr
Goto Top
Mal schnell zusammen geschrotet ...
http://www.sqlfiddle.com/#!9/9337de/7/0

Gruß w.
akretschmer
akretschmer 01.06.2021 um 07:12:24 Uhr
Goto Top
das gezeigte SQL funktioniert nur in (älteren) MySQL-Inkarnationen, alle anderen funktionierenden Datenbanken würden einen Fehler anzeigen. Grundregel: bei Aggregationen alle Spalten aggregiert oder gruppiert.
ukulele-7
ukulele-7 01.06.2021 um 07:34:47 Uhr
Goto Top
GROUP_CONCAT und ein sauberes GROUP BY sind die Lösung.

Aber dein Beispiel ist vermutlich schlecht gewählt. Ein Titel (Tabelle 1) kann ja i.d.R. nicht nur mehrere Genre (Tabelle 2) haben sondern auch umgekehrt kann ein Genre mehrere Titel haben. In dem Fall Genre / Titel würde man eher mit einer Zwischentabelle arbeiten.