SQL Query

scHnaebbl0r
Neuling
Neuling
Beiträge: 4
Registriert: 15. Sep 2009 17:37

SQL Query

Beitrag von scHnaebbl0r »

Hallo zusammen!

Angenommen ich habe folgende Relationen:

Interpret (ID, Name, Gründung)
Album (ID, Albumtitel, Interpret*, Jahr)
Song (ID, Songtitel, Album*, Länge)

Der Einfachheit halber bekommt jede Relation eine eindeutige ID als Prim.Key und es herrschen jeweils 1:n Beziehungen zwischen Interpret-Album und Album-Song.

Nun bin ich einfach nicht in der Lage eine Anfrage in SQL zu formulieren, welche mir eine Liste aller Alben liefert, die zusätzlich eine Spalte mit der Spieldauer des Albums enthält.

Für ein bestimmtes Album mit dem Titel 'X' würde meine Query so aussehen:

SELECT A.Albumtitel, SUM(S.Länge) AS Spieldauer
FROM Album A, Song S
WHERE A.ID=S.Album And A.Albumtitel='X';

Wie müsste ich das nun Erweitern um eine Liste aller Alben inkl. Spieldauer zu bekommen? Wäre es der bessere Ansatz eine neue Sicht über CREATE VIEW zu erstellen?

Thx im Voraus!!

henß
Mausschubser
Mausschubser
Beiträge: 45
Registriert: 18. Nov 2009 14:50

Re: SQL Query

Beitrag von henß »

Schönen Abend,

probier mal:

SELECT Albumtitel, SUM(S.Länge) AS Spieldauer
FROM Album A, Song S
WHERE A.ID=S.Album GROUP BY A.ID;

Wenn Du auf die Liste aller Alben bestehst, könntest Du zur Sicherheit einen Left Outer Join in Erwägung ziehen :)

scHnaebbl0r
Neuling
Neuling
Beiträge: 4
Registriert: 15. Sep 2009 17:37

Re: SQL Query

Beitrag von scHnaebbl0r »

Hehe sehr gut! Das Group By hat's bereits gerissen 8)

Vielen Dank!!

b00m3r
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 10. Okt 2005 11:02

Re: SQL Query

Beitrag von b00m3r »

Eins noch ... hab ein SQL der nach oben geschilderten Fall folgendermaßen aussieht.

Select temp.Länge A.Albumtitel
From Album A, (Select Sum(S.Länge) As Länge, A.ID As ID From Song S, Album A, Where S.Album = A.ID Group by A.ID)temp
Where temp.id = A.ID


Wichtig ist an der Stelle das man nach der ID groupiert und in einem letzten Schritt den Albumtitel auflöst. Das umgeht das Risiko von Alben mit dem gleichen Namen.

Greetz

Antworten

Zurück zu „Archiv“