Zwei Tabellen zusammenführen (alle Rows von der ersten + Null Rows / zugehörige aus der zweiten)

Featch

Neuer Benutzer
Beiträge
1
Hallo zusammen,

ich habe ein hoffentlich simples SQL Select-Statement-Problem:
Ich möchte über die Spalte "INFNR" in Tabelle k (diese Spalte enthält auch NULL-Werte!) eine zweite Tabelle g joinen. In Tabelle g ist INFNR der Primärschlüssel (keine NULL-Werte).

Nun möchte ich ALLE Zeilen aus Tabelle k ausgeben (auch wenn dort NULL bei INFNR steht!) und nur die dazugehörigen Informationen aus Tabelle g. Wenn ich also ein Feld aus Tabelle g SELECTe, soll in Zeilen wo k.INFNR = null ist bei g.xyz auch null stehen, weil nichts treffendes gefunden wurde. Wichtig ist, dass die Zeile trotzdem angezeigt werden soll, trotz ungültigen JOINs.

Bei den meisten JOINs werden NULL-Werte einfach herausgefiltert. Das möchte ich aber nicht und verstehe leider nicht wie.

Vielen Dank bereits für Eure Hilfe!

VG
 
Werbung:
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.028
echt so schwer, mal etwas nachvollziehbares zu zeigen?

Scheinbar suchst Du einen simplen left join:

Code:
edb=# create table k(infnr int, k_val text);
CREATE TABLE
edb=*# insert into k values (1, 'wert 1 in k');
INSERT 0 1
edb=*# insert into k values (null, 'wert NULL in k');
INSERT 0 1
edb=*# insert into k values (2, 'wert 2 in k');
INSERT 0 1
edb=*# create table g(infnr int primary key, g_val text);
CREATE TABLE
edb=*# select * from k left join g on k.infnr=g.infnr;
 infnr |     k_val      | infnr | g_val
-------+----------------+-------+-------
     1 | wert 1 in k    |       |
       | wert NULL in k |       |
     2 | wert 2 in k    |       |
(3 rows)

edb=*# insert into g values (1, 'wert 1 von g');
INSERT 0 1
edb=*# select * from k left join g on k.infnr=g.infnr;
 infnr |     k_val      | infnr |    g_val     
-------+----------------+-------+--------------
     1 | wert 1 in k    |     1 | wert 1 von g
       | wert NULL in k |       |
     2 | wert 2 in k    |       |
(3 rows)

edb=*#

Zumindest hat meine Glaskugel Dich so verstanden ...
 
Oben