left join funktioniert nicht richtig

habak

Benutzer
Beiträge
5
Hallo,

als Anfänger habe ich folgendes Problem.
In Tabelle 1 (tab1) habe ich Benutzer hinterlegt z.B.

id name
1 A
2 B
3 C
4 D

Weiterhin habe ich eine zweite Tabelle (tab2) in der Events und die teilnehmenden Benutzer an dem jeweiligen Event gespeichert werden z.B.

id event_id name_id
1 1 2
2 1 3
3 2 1

Nun möchte ich für den Event mit der id=1 folgende Darstellung

name name_id
A Null
B 2
C 3
D Null

Dies wollte ich mit folgender Abfrage erreichen:

select a.name, b.name_id
from tab1 as a
left join (tab2 as b on a.id=b.name_id)
where b.id= 1

Als Ergebnis erhalte ich aber

name name_id
B 2
C 3

Was mache ich denn falsch?

Für Eure Hilfe schon im voraus vielen Dank.

Gruß

Habak
 
Werbung:
Hallo,

als Anfänger habe ich folgendes Problem.

Als Dir antwortender hab ich auch ein Problem: Deine Beschreibung paßt nicht zu den Daten.

Vielleicht suchst Du einen left outer join:

Code:
test=*# select * from tab2;
 id | event_id | name_id
----+----------+---------
  1 |        1 |       2
  2 |        1 |       3
  3 |        2 |       1
(3 rows)

test=*# select tab1.name, tab2.name_id from tab1 left outer join tab2 on tab1.id=tab2.name_id ;
 name | name_id
------+---------
 A    |       1
 B    |       2
 C    |       3
 D    |
(4 rows)
 
-- oder
 
test=*# select tab1.name, tab2.event_id from tab1 left outer join tab2 on tab1.id=tab2.name_id ;
 name | event_id
------+----------
 A    |        2
 B    |        1
 C    |        1
 D    |
(4 rows)
 
Hallo akretschmer,

vielen Dank für Deine Hilfe. Leider klappt das auch nicht mit outer Join, so wie ich es benötige.
Diesmal die Beschreibung und Daten ohne Fehler.

tab.png


Mit der beschriebenen Abfrage bekomme ich immer das Ergebnis von tab3. Egal ob ohne oder mit outer join.
Ich hätte aber gerne das Ergebnis von tab4 und dachte, dass dies mit der Abfrage so zu erreichen sei.

Aber wie ist den die richtige Lösung.

Vielen Dank für Deine Mühe.

Gruß

Habak
 
Werbung:
Hallo akretschmer,

es liegt an der "where"-Klausel; diese Bedingung muss raus und in die "on"-Bedingung:

left join (tab2 ON (tab.id = tab2,name_id AND tab2.event_id=1));

Problem gelöst. Vielen Dank.
 
Zurück
Oben