C
Camino
Gast
Hallo, ich hab da gerade ein Problem mit einem SQL-Statement und grübel da schon einige Zeit erfolglos darüber nach. Vielleicht kann mir ja hier jemand weiterhelfen.
Und zwar hab ich 3 Tabellen mit Interpreten, CDs und Tracks, in denen die Musik auf CDs gespeichert/verwaltet werden sollen.
musik_interpreten
-----------------
id
name
musik_cds
----------
id
interpret_id
titel
jahr
original
info
discs
musik_tracks
------------
id
interpret_id
cd_id
titel
disc_nr
track_nr
Nun möchte ich in meiner Anwendung alle Interpreten in einer JTable aufgelistet haben und dazu deren Anzahl der CDs und Tracks. Aber irgendwie komme ich mit dem SQL-Statement nicht klar. Ich muss ja die 3 Tabellen miteinander verbinden, also entweder über JOIN oder Primärschlüssel der Interpreten gleich Fremdschlüssel in den anderen beiden Tabellen. Und dann auch noch mit COUNT und GROUP BY arbeiten? Oder nicht?
Bisher kam ich zu so einem SQL-Code:
Das ResultSet sollte dann in eine ArrayList<Interpret> gespeichert werden:
Was aber leider nicht funktioniert, bzw. nur 2 Interpreten mit seltsamen (falschen, viel zu hohen) Zahlen ausgibt. Über Tipps zum richtigen SQL-Statement (vielleicht auch mit eienr Erläuterung) wäre ich sehr dankbar...
Und zwar hab ich 3 Tabellen mit Interpreten, CDs und Tracks, in denen die Musik auf CDs gespeichert/verwaltet werden sollen.
musik_interpreten
-----------------
id
name
musik_cds
----------
id
interpret_id
titel
jahr
original
info
discs
musik_tracks
------------
id
interpret_id
cd_id
titel
disc_nr
track_nr
Nun möchte ich in meiner Anwendung alle Interpreten in einer JTable aufgelistet haben und dazu deren Anzahl der CDs und Tracks. Aber irgendwie komme ich mit dem SQL-Statement nicht klar. Ich muss ja die 3 Tabellen miteinander verbinden, also entweder über JOIN oder Primärschlüssel der Interpreten gleich Fremdschlüssel in den anderen beiden Tabellen. Und dann auch noch mit COUNT und GROUP BY arbeiten? Oder nicht?
Bisher kam ich zu so einem SQL-Code:
Code:
SELECT i.id, i.name, COUNT(c.titel) AS cdcount, COUNT(t.titel) AS trackcount
FROM musik_interpreten i, musik_cds c, musik_tracks t
WHERE c.interpret_id = i.id AND t.interpret_id = i.id
GROUP BY i.name, i.id ORDER BY i.name
Das ResultSet sollte dann in eine ArrayList<Interpret> gespeichert werden:
Java:
Interpret interpret = new Interpret(rs.getInt("id"), rs.getString("name"),
rs.getInt("cdcount"), rs.getInt("trackcount"));
Was aber leider nicht funktioniert, bzw. nur 2 Interpreten mit seltsamen (falschen, viel zu hohen) Zahlen ausgibt. Über Tipps zum richtigen SQL-Statement (vielleicht auch mit eienr Erläuterung) wäre ich sehr dankbar...