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?
Please also mark the comments that contributed to the solution of the article
Content-Key: 667206
Url: https://administrator.de/contentid/667206
Printed on: April 23, 2024 at 21:04 o'clock
5 Comments
Latest comment
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.