Frage zu JOIN

20/03/2008 - 12:30 von Daniel Brose | Report spam
Hallo *,

irgendwie stehe ich auf dem Schlauch - bis eben hàtte ich noch behauptet
ich habe das JOINen verstanden. Doch nun zweifle ich gerade:
Ich habe eine Tabelle mit Artikeln (artikel..artikel) und eine Tabelle
mit Preisen pro Artikel pro Kunde (kunden..sopdat).
Es existiert ein Artikel mit der Nummer 576, es existiert allerdings
kein spezieller Preis für den Kunden 2223.
Sollte mir das (eigentlich doch einfache) folgende Statement nicht aber
trotzdem eine Zeile mit allen Spalten der Tabelle 'artikel' zurückgeben
und die Spalte aus der Tabelle 'sopdat' als NULL? Ich bekomme jedenfalls
ein komplett leeres Ergebnis.

SELECT artikel.artbez1, artikel.artbez2, artikel.bur_vk, sopdat.vkns
FROM artikel..artikel artikel
LEFT JOIN kunden..sopdat sopdat
ON artikel.burnr = sopdat.burnr
WHERE artikel.burnrW6
AND sopdat.knr"23

Anstatt LEFT habe ich auch mal FULL probiert - mit dem selben Ergebnis.
Wenn ich für sopdat.knr im WHERE einen Kunden einsetze bekomme ich ein
Ergebnis mit sàmtlichen Spalten.

Übersehe ich was oder sollte ich doch noch mal die T-SQL-Schulbank drücken?


Vielen Dank und Gruß
Daniel
 

Lesen sie die antworten

#1 Frank Kalis
20/03/2008 - 13:16 | Warnen spam
"Daniel Brose" wrote:

irgendwie stehe ich auf dem Schlauch - bis eben hàtte ich noch behauptet
ich habe das JOINen verstanden. Doch nun zweifle ich gerade:
Ich habe eine Tabelle mit Artikeln (artikel..artikel) und eine Tabelle
mit Preisen pro Artikel pro Kunde (kunden..sopdat).
Es existiert ein Artikel mit der Nummer 576, es existiert allerdings
kein spezieller Preis für den Kunden 2223.
Sollte mir das (eigentlich doch einfache) folgende Statement nicht aber
trotzdem eine Zeile mit allen Spalten der Tabelle 'artikel' zurückgeben
und die Spalte aus der Tabelle 'sopdat' als NULL? Ich bekomme jedenfalls
ein komplett leeres Ergebnis.

SELECT artikel.artbez1, artikel.artbez2, artikel.bur_vk, sopdat.vkns
FROM artikel..artikel artikel
LEFT JOIN kunden..sopdat sopdat
ON artikel.burnr = sopdat.burnr
WHERE artikel.burnrW6
AND sopdat.knr"23

Anstatt LEFT habe ich auch mal FULL probiert - mit dem selben Ergebnis.
Wenn ich für sopdat.knr im WHERE einen Kunden einsetze bekomme ich ein
Ergebnis mit sàmtlichen Spalten.

Übersehe ich was oder sollte ich doch noch mal die T-SQL-Schulbank drücken?




Du übersiehst, dass Du Dich mit Deinem letzten Pràdikat
...
AND sopdat.knr"23
...
auf die "unpreserved" Tabelle beziehst, also die Tabelle auf der rechten
Seite eines LEFT JOINs. Dadurch verànderst Du den LEFT JOIN in einen INNER
JOIN.
Frank Kalis
Microsoft SQL Server MVP
Webmaster: http://www.insidesql.org

Ähnliche fragen