Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

SQL - Ausgabe Datensatz auch wenn in Join-Tabelle kein Eintrag

RStp / 8 Antworten / Baumansicht Nickles

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;

bei Antwort benachrichtigen
thomas woelfer RStp „SQL - Ausgabe Datensatz auch wenn in Join-Tabelle kein Eintrag“
Optionen

ich glaube diese frage habe ich nicht ganz verstanden: das beispiel sieht doch ok aus - was geht denn damit nicht ?

WM_QUERY
thomas woelfer

this posting contains no tpyos.
bei Antwort benachrichtigen
RStp thomas woelfer „ich glaube diese frage habe ich nicht ganz verstanden: das beispiel sieht doch...“
Optionen

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 !

bei Antwort benachrichtigen
thomas woelfer RStp „SQL - Ausgabe Datensatz auch wenn in Join-Tabelle kein Eintrag“
Optionen

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

this posting contains no tpyos.
bei Antwort benachrichtigen
RStp thomas woelfer „ich vermute, das tab1 und tab2 zumindest noch eine id spalte haben, richtig? -...“
Optionen

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 !

bei Antwort benachrichtigen
(Anonym) RStp „SQL - Ausgabe Datensatz auch wenn in Join-Tabelle kein Eintrag“
Optionen

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

bei Antwort benachrichtigen
RStp (Anonym) „hey, outer join wird zumindest mach ich das bei sybase-servern so...“
Optionen

Danke für die Antwort ! Beim Oracle SQL ist es das (+), da funktioniert * nicht !

bei Antwort benachrichtigen
T-Rex RStp „SQL - Ausgabe Datensatz auch wenn in Join-Tabelle kein Eintrag“
Optionen

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

 GrüßeT-Rex 
bei Antwort benachrichtigen
RStp T-Rex „Du mußt den richtigen Join-Typ verwenden: SELECT FROM tabMaster LEFT JOIN...“
Optionen

Danke für die Hilfe, werde ich auch mal ausprobieren !

bei Antwort benachrichtigen