PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL Select von mehreren Tabellen


Brudertac
2012-01-31, 15:29:46
Hallo zusammen,

ich brauch mal eure Hilfe :)

3 Tabellen sind gegeben.
Alle 3 haben die Spalte "Objekt". Über dieses Objekt (zb. eine Nummer)
kann ich in allen 3 Tabellen Daten zu dem Objekt finden.

Allerdings enthalten alle 3 Tabellen unterschiedliche Daten bzw. auch mehrere
Datensätze zum Objekt.
Ein UNION geht also IMHO nicht da die Spalten nicht Identisch sind.


Ausserdem enthalten alle 3 Tabellen eine Spalte "Datum".

Gibt es eine Möglichkeit die Daten dieser 3 Tabellen in einem Ergebniss anzuzeigen OHNE diese Daten zu mixen?

Das Ergebniss sollte einfach nach dem Datum sortiert sein...


Ich hoffe das war verständlich formuliert :)

Danke!!!

Kinman
2012-01-31, 15:58:47
SELECT t1.spalte_1, t1.spalte_2, t2.spalte_1, t3.spalte_1 FROM tabelle_1 AS t1 JOIN tabelle_2 AS t2 ON t1.objekt = t2.objekt JOIN tabelle_3 AS t3 ON t1.objekt = t3.objekt WHERE ... ORDER BY t1.datum;

Mit t1 bis t3 kannst du dann die Tabellen unterscheiden. Alternativ kannst du die Benennung (AS t1) weglassen und den gesamten Tabellennamen hinschreiben.

z.B.: tabelle_1.datum

Du kannst auch die selektierten Spalten benennen.

SELECT t1.datum AS datum_1 ...

lg Kinman

Brudertac
2012-02-01, 11:19:38
Hi Kinman,

vielen Dank für deine Hilfe aber das Ergebnis ist nicht ganz das was ich suche.

Ich geh mal etwas ins Details um das zu erklären:

t1 Spalten und Werte:

ID, Vorname, Nachname
1 , Hans , Müller


t2 Spalten und Werte:

ID, Vorname, Nachname, Telefon
1 , Hans , , 12345


Nach deiner Abfrage erhalte ich als Ergebnis:

1, Hans , Müller , 12345
1, Hans , Müller , 12345


Was ich aber brauche:

1, Hans , Müller ,
1, Hans , , 12345


Die Beispielwerte sind vielleicht etwas blöd aber ich hoffe du siehst was ich meine. :)

Geht sowas überhaupt?

Danke nochmals!

Frucht-Tiger
2012-02-01, 12:45:29
Hi Brudertac,

dieses Ergebnis solltest du mit einem FULL OUTER JOIN bekommen, eine Übersicht über die verschiedenen Join-Typen findest du hier:

http://de.wikibooks.org/wiki/Einführung_in_SQL:_OUTER_JOIN

Probiers mal aus, einfach ein FULL vor den Join schreiben.

Gruß
Frank

Brudertac
2012-02-01, 12:59:46
Hi Frank,

danke. Da bekomme ich aber auch teilweise doppelte Ergebnisse.
(Liegt wohl daran das eine Tabelle mehrere Einträge passend zu "Hans" hat.)

Ich glaub ich habs jetzt aber mit UNION hinbekommen. Bin grad noch am Tüfteln :)

Kinman
2012-02-01, 16:30:08
Keine Chance, die Tabellen mit Keys zu verknüpfen? Und gegen doppelte Ausgaben hilft u.U. DISTINCT. Kann aber ohne genauere Infos, wie das auftritt nicht mehr dazu sagen.

lg Kinman

AtTheDriveIn
2012-02-01, 19:32:57
Hi Kinman,

vielen Dank für deine Hilfe aber das Ergebnis ist nicht ganz das was ich suche.

Ich geh mal etwas ins Details um das zu erklären:

t1 Spalten und Werte:

ID, Vorname, Nachname
1 , Hans , Müller


t2 Spalten und Werte:

ID, Vorname, Nachname, Telefon
1 , Hans , , 12345


Nach deiner Abfrage erhalte ich als Ergebnis:

1, Hans , Müller , 12345
1, Hans , Müller , 12345


Was ich aber brauche:

1, Hans , Müller ,
1, Hans , , 12345


Die Beispielwerte sind vielleicht etwas blöd aber ich hoffe du siehst was ich meine. :)

Geht sowas überhaupt?

Danke nochmals!

Vielleicht habe ich dich falsch verstanden, aber das würde in Oracle gehen

select ID,name,nachname, NULL as Telefon from t1
union
select ID,Name,NULL as nachname,telefon from t2

keine doppelten

select distinct * from
(
//see query above
)