Folgendes Problem : Ich habe 2 Tabellen und muss diese per Join verbinden, da in meiner Ausgabe die Masterdaten aus Tabelle 1 kommen und die Detaildaten aus Tabelle 2. Problem ist, es gibt auch Masterdaten ohne Details, die mir aber bei einem Join nicht mit angezeigt werden. Aber genau das möchte ich auch ! Habt Ihr eine Lösung ???
Beispiel :
select tabelle1.id, tabelle2.beschreibung
from tabelle1, tabelle2
where tabelle1.id = tabelle2.id;
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
ich glaube diese frage habe ich nicht ganz verstanden: das beispiel sieht doch ok aus - was geht denn damit nicht ?
WM_QUERY
thomas woelfer
Ganz einfach, Du hast folgende Datensätze :
Tab1 Tab2
A 123
B
C 456
Dann wird Dir nur Datensatz A und C ausgegeben, aber nicht B !
ich vermute, das tab1 und tab2 zumindest noch eine id spalte haben, richtig? - kann es sein das du sehr wohl ein ergebniss bekommst (das natuerlich fuer die beschreibung leer ist) und du das darum nicht siehts?
WM_QUERY
thomas woelfer
Nein, weil ich ja auch nicht die Ausgabe von "B" in dem Falle sehe. Aber wir haben soeben eine Lösung gefunden, Du musst einen Outer-Join machen ! Wie folgt :
select tabelle1.id, tabelle2.details
from tabelle1, tabelle2
where tabelle1.id = tabelle2.id(+)
Das Plus-Zeichen in Klammern hinter dem Wert tabelle2.id verursacht, dass wenn in tabelle2 kein Eintrag ist, trotzdem die Daten aus Tabelle1 angezeigt werden !
hey, outer join wird (zumindest mach ich das bei sybase-servern so) folgendermaßen geschrieben:
select blabla from Table1 t1, Table2 t2
where t1.Schlüssel =* t2.Schlüssel
alternativ machst'n union, erst alle selektieren, die NICHT in tabelle2 sind (... where tabelle1.id not in (select id from tabelle2)) und dann die, die in tabelle2 enthalten sind (...dein oben geschriebenes select).
variante2 stellt aber 'n monströsen aufwand für deinen db-server da, denke ich.
grüsse,
-AleX
-aleX
Danke für die Antwort ! Beim Oracle SQL ist es das (+), da funktioniert * nicht !
Du mußt den richtigen Join-Typ verwenden:
SELECT * FROM tabMaster LEFT JOIN tabDetail ON TabMaster.MasterID = tabDetail.MasterLink;
Die entsprechenden Felder solltest Du nur noch angeben, ich habe hier irgend welche Namen angegeben
Danke für die Hilfe, werde ich auch mal ausprobieren !