Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>SQL Abfrage mehrerer Tabellen - wie alle Daten anzeigen lassen, wenn in einer Tabelle nicht vorhanden

SQL Abfrage mehrerer Tabellen - wie alle Daten anzeigen lassen, wenn in einer Tabelle nicht vorhanden

pismo06.04.1208:44
Hallo liebe Freunde des gepflegten Oster-Fests,

ich habe ein kleines Problem und würde mich sehr freuen, wenn mir jemand helfen könnte.

Ich habe insgesamt drei Tabellen in einer Datenbank, die ich gerne in einem HTML-Table darstellen würde.

TABELLE 1 (KNUMMER):
KUNDENNR
0001
0002
0003
0004
0005

TABELLE 2 (KNAME):
KUNDENNR|NAME
0001|Petersen
0002|Hansen
0003|Müller
0004|Wagner

TABELLE 3 (KORT):
KUNDENNR|ORT
0001|Hamburg
0002|Berlin
0005|München

Wunschergebnis:
KUNDENNR|NAME|ORT
0001|Petersen|Hamburg
0002|Hansen|Berlin
0003|Müller|
0004|Wagner|
0005||München

Meine Abfrage ist:
SELECT * FROM KNUMMER,KNAME,KORT WHERE KNUMMER.KUNDENNR = KNAME.KUNDENNR AND KNAME.KUNDENNR = KORT.KUNDENNR  

Jedoch werden so nur die ersten beiden Datensätze ausgegeben. Ich glaube das Stichwort heisst RIGHT JOIN, aber das geht nur mit zwei Tabellen afaik.

Achja, es gibt noch andere zweispaltige Tabellen, die weitere Details enthalten.

Danke im Voraus!
0

Kommentare

yan.kun056706.04.1210:05
Was ist das überhaupt für ein Schwachsinn mit der ersten Tabelle, wo nur Kundennummern drinstehen?

Normal geht das locker so:

select k.KUNDENNR, k.NAME, o.NAME from KNAME k
left join KORT o ON o.KUNDENNR = k.KUNDENNR

Und du kannst joinen bis du schwarz wirst.
0
hallo0224.04.1223:59
Hallo

Wenn du mit "Where gleich" arbeitest, so wie du es tust, entspricht das einem INNER JOIN.. Sprich es werden nur die Datensätze angezeigt, in welchem auch allem vorkommen..
Bei dir also nur KundenNr 1 + 2, da nur diese in alle Tabellen vorkommen..

Deine Lösung heisst (fast RIGHT JOIN) OUTER JOIN..

Mit OUTER JOIN, wählst du sozusagen eine Tabelle als Master, d.h. von der nimmt es alle Einträge, auch wenn sie in den andern nicht vorkommen.

Probier das:

SELECT * FROM 
(KNUMMER LEFT JOIN KNAME ON
KNUMMER.KUNDENNR=KNAME.KUNDENNR)
LEFT JOIN KORT ON KNUMMER.KUNDENNR=KORT.KUNDENNR

0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.