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-Key: 667206

Url: https://administrator.de/contentid/667206

Printed on: April 23, 2024 at 21:04 o'clock

Member: BirdyB
Solution BirdyB May 31, 2021 at 14:24:47 (UTC)
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
Member: Snakey
Snakey May 31, 2021 at 14:49:31 (UTC)
Goto Top
Das klingt gut face-smile werde es die Woche mal ausprobieren und eine Rückmeldung geben face-smile
Mitglied: 148121
148121 May 31, 2021 updated at 15:13:34 (UTC)
Goto Top
Mal schnell zusammen geschrotet ...
http://www.sqlfiddle.com/#!9/9337de/7/0

Gruß w.
Member: akretschmer
akretschmer Jun 01, 2021 at 05:12:24 (UTC)
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.
Member: ukulele-7
ukulele-7 Jun 01, 2021 at 05:34:47 (UTC)
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.