# ResultSet mit "Untertabellen"



## resTaFe (1. Jan 2013)

Hallo,

hab eine Frage, wozu ich im Web keine Antwort finde und zwar führe ich 
mein Select aus und speichere die zurückgelieferten Daten natürlich in 
einem ResultSet.

Nun kann ich im ResultSet die einzelnen Spalten ansprechen und ausgeben 
lassen. Das gilt für alle Tabellen. Also wenn ich in meinem select statement
ein join von Tabelle_1 auf Tabelle_2 habe, so bekomme ich erst die Spalten
von Tabelle_1 und dahinter angehängt die entsprechenden Spalten von Tabelle_2.

Was aber, wenn ich für ein einzelnes Result von Tabelle_1 durch das join
mehrere Results von Tabelle_2 habe. Also nehmen wir an duch das Select
bekommen wir von Tabelle_1 lediglich ein Ergebnis zurück also eine Zeile.
Dieser Zeile sind aber, sagen wir mal 5 Zeilen aus Tabelle_2 zugeordnet.

Wie kann ich nun alle Results von Tabelle_1 mit den jeweiligen "Untertabellen",
also den Results von Tabelle_2 iterativ auslesen.

ich kann ja mit ResultSet.next() immer auf das nächste Ergebnis zeigen lassen
und wie kann ich jetzt auf die Daten von Tabelle_2 in diesem Ergebnis zugreifen?
Über den Spaltenname geht es wohl nicht denke ich mir, da die Spaltennamen 
ja öfter vorkommen wenn ich mehrere Zeilen aus Tabelle_2 habe.

Hoffe ich konnte meine Frage verständlich formulieren und jemand weiß 
eine Antwort darauf


----------



## KSG9|sebastian (1. Jan 2013)

Versteh dein Problem nicht.
Joinst du T1 mit T2 und es kommen 5 Rows zurück (1 Row aus T1 passt auf 5 Rows aus T2) hast du im ResultSet 5 Rows insgesamt:
5x den einen Satz aus T1
5x die Sätze aus T2

Es ergibt sich immer eine vollständige Tabelle. Es kann nicht passieren, das ein Join für eine Seite nix liefert. Mindestens ist dann das Ergebnis ader einen Seite NULL.


----------



## OlliL (1. Jan 2013)

Du solltest in dem Fall 2 Selects machen. Erstmal Tabelle 1 und dann mit deiner heutigen Join-Bedingung von Tabelle 2.
Es bringt ja nichts, durch den Join die Daten zu denormalisieren, und sie dann wieder durch "Gruppenwechsel" Funktionalitäten in Java wieder zur normalisieren. Da solltest du sie besser 2 mal Auslesen.


----------



## resTaFe (1. Jan 2013)

Achso, ich verstehe....

Ich habe das Ergebnis von Tabelle 1 dann quasi mehrfach.

Wusste ich nicht. OK.

Aber wie unterscheide ich dann das eine Ergebnis von Tabelle_1
von dem anderen Ergebnis? Ich habe eine Container-Klasse für
ein Result. Jedes einzelne Ergebnis von Tabelle_1 soll in eine 
neu instanziierte Container-Klasse übertagen werden.
Die zurückgelieferten Zeilen von Tabelle_2 sollen in einer
Liste der Container-Klasse gespeichert werden.


----------



## KSG9|sebastian (1. Jan 2013)

Oehm...du bekommst jaein ResultSet. Hast du z.B. 1 Match bei T1 und dazu passend 5 Matches bei T2 sind ed 5 Rows. Du iterierst via ResultSet#next über das ResultSet und baust daraus deine Objekte.
Deine Klassen sollten nicht 1 zu 1 der Tabelle/dem Result nachgebaut werden. Deine Klassen spiegeln die Struktur wieder. Beim auslesen aus der Datenbank musst du dann die Ergebnisse in dein Model mappen/umbauen


----------

