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:
Ausgabe davon ist dementsprechend:
ID - Musiktitel - MinGenre - MaxGenre
Hat da jemand eine Idee bzw. ist dies überhaupt umsetzbar?
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
5 Kommentare
Neuester Kommentar
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
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

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.
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.