phpbar.de logo

Mailinglisten-Archive

?? Hilfe zum Verstaendis von LEFT JOIN

?? Hilfe zum Verstaendis von LEFT JOIN

Wolfgang Hauck wbh at euta.net
Die Jul 15 16:44:54 CEST 2003


>Bloß: wie kann man MySQL ein anderes Verhalten 'beibringen'?  Ich 
will
>ja gerade nicht, daß es aufhört.

>Gruß von der Ostsee

Hi Hanjo,

Nochmals zum Verständnis:

... from LinkList Left Join LinkExcl ON ...

MySQL holt die Tabelle LinkList

... LinkList.id_nr = LinkExcl.id_nr ...

Jede id_nr in LinkList wird mit jeder gleichen id_nr von LinkExcl 
verknüpft.
Gibts in LinkExcl keine mit LinkList übereinstimmende id_nr wird ein 
leerer Datensatz angehängt.

Soweit ist hoffentlich alles klar..??

Jetzt gibts da noch Datensätze, dessen id_nr zwar in LinkExcl 
drinstehen, nicht aber in LinkList. Diese werden bei diesem LEFT JOIN 
!!! nicht !!! angezeigt. Sowas wird auch referenzielle 
Integritätsverletzung genannt.

Warum??

Eine Beziehung sollte nur in einer Richtung erfolgen d.h.

Haupttabelle -> Untertabelle 1:1 oder 1:n

Jetzt kommen wir mal zu deinem where:

where
(LinkList.Bereich = "Lichtbote"
or LinkList.Bereich = "LB-Sued"
or LinkList.Bereich = "ALL")
and
(NOT LinkExcl.Bereich = "LB-Sued"
|| LinkExcl.Bereich IS NULL )

wichtig in diesem Zusammenhang ist:

(NOT LinkExcl.Bereich = "LB-Sued"
|| LinkExcl.Bereich IS NULL )

Was machst du da????

Du vergleichst logisch "oder" LinkExcl.Bereich = "LB-Sued" mit 
LinkExcl.Bereich IS NULL ...
Das Ergebis ist immer falsch dann NOT:
Dein Ergebnis ist immer 1 d.h. true da LinkExcl.Bereich !! nie !! 
NULL ist...

Deshalb ist es völlig Wurscht oder Käse was du in LinkExcl.Bereich 
reinschreibst...

Tja...

Ändere mal das ganze so:

((NOT LinkExcl.Bereich = "LB-Sued") OR LinkExcl.Bereich IS NULL )

Da kann der Join aber nix dafür ;-)

MfG Wolfgang



-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive