Zu blöd für nen outer join?

gurbelunder

SQL-Guru
Beiträge
136
Moin Jungs,

ich glaube, das Wochenende ist bei mir noch nicht ganz vorbei. Ich bin gerade irgendwie zu blöd für einen Outer Join.

Folgende Problemstellung: Zwei Tabellen, eine mit Datensätzen zu Personen und dem Raum, in dem sie sitzen. Die zweite mit den Details zu den Räumen.

Mal Grob skizziert:

T_PERSON:
  • P_ID
  • Vorname
  • Nachname
  • R_ID (FK zur T_RAUM)
T_RAUM:
  • R_ID
  • Raum (die eigentliche Raumnummer)
  • Standort
Nun gibt es Freelancer, denen kein Raum im Gebäude zugewiesen ist, das heißt, die R_ID Spalte in der T_PERSON ist NULL.

Mein Versuch:

Code:
select p.Vorname, p.Name, r.Raum as "Raumnummer"
from T_PERSON p left outer join T_RAUM r
on p.Raum_ID = r.ID
order by p.Vorname, p.Name, r.Raum;

Code:
select p.Vorname, p.Name, r.Raum as "Raumnummer"
from T_PERSON p left outer join T_RAUM r
on p.Raum_ID = r.ID
order by p.Vorname, p.Name, r.Raum;

Verstehe ich gerade nen Outer Join verkehrt?

Danke euch und Grüße,
David
 
Werbung:
Mein Versuch:

Code:
select p.Vorname, p.Name, r.Raum as "Raumnummer"
from T_PERSON p left outer join T_RAUM r
on p.Raum_ID = r.ID
order by p.Vorname, p.Name, r.Raum;

Code:
select p.Vorname, p.Name, r.Raum as "Raumnummer"
from T_PERSON p left outer join T_RAUM r
on p.Raum_ID = r.ID
order by p.Vorname, p.Name, r.Raum;

Verstehe ich gerade nen Outer Join verkehrt?

Danke euch und Grüße,
David

Beide selects sehen auf den ersten Blick gleich und in Ordnung aus. Was bekommst Du, was erwartest Du?
 
Wo genau liegt denn das Problem ?
Ich kann nicht sagen ob es richtig oder falsch ist wenn ich keine Ausgangsdaten und die daraus resultierenden Ergebnisse sehe... :)
Ansonsten versuchs mal so:


Code:
Select p.vorname,
       p.name,
       r.raum As "Raumnummer"
From   t_person p
Left  Join t_raum r
On     p.raum_id = r.id

Union All

Select p.vorname,
       p.name,
       p.raum
From   t_person p
Where  p.raum Is Null

Order  By p.vorname, p.name, r.raum;
 
Hehe, ihr seit lustig, ich gebe ja nun nicht meine produktiven Daten raus ;). Aber mal beispielhaft:

Nehmen wir an, in der Tabelle T_PERSON gäbe es diese Datensätze:
  • Mario Müller, Raum 5
  • Kerstin Mustermann, kein Raum

In der Tabelle T_RAUM dann diese:
  • Raum 5, Standort Berlin
  • Raum 10, Standort Köln
Meine Abfrage liefert mir dann nur den Datensatz mit Mario Müller...

Sprich mir fehlen die Personen, denen kein Raum zugewiesen ist. Einen Union wollte ich eigentlich vermeiden, dass sollte ja mit dem Join machbar sein. Das Ganze soll später mit noch mehr Infos in eine View.

EDIT: Ok, nun hab ich's, es passte was mit dem Schlüsselwert nicht, der war korrupt. War auf den ersten Blick nicht zu sehen. Also doch nicht zu blöd. Danke euch!!!
 
Werbung:
Die ANSI-Schreibweise erlaubt aber auch sowas:
Code:
Select *
From tabelle_a
Join tabelle_b
Join tabelle_c
... (Könnte man ewig so weiterführen)
On tabelle_a.id = tabelle_b.id
On tabelle_b.ref_id = tabelle_c.id
... (Könnte man ewig so weiterführen)

Was ich persönlich einfach nur unleserlich finde...


Edit:

Man kann es sogar umdrehen:
Code:
Select *
From tabelle_a
On tabelle_a.id = tabelle_b.id
On tabelle_b.ref_id = tabelle_c.id
... (Könnte man ewig so weiterführen)
Join tabelle_b
Join tabelle_c
... (Könnte man ewig so weiterführen)
 
Zurück
Oben