phpbar.de logo

Mailinglisten-Archive

Re: joins usw.
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: joins usw.



Hallo Ralf,
der folgende Abschnitt ist aus der Doku auf
http://www2.rent-a-database.de/mysql-118.html#joins
Grosser Dank an den Autor Guido Stepken!

// Zitat Anfang
[...]
OUTER JOINs 

Folgende Aufgabe : Sie wollen eine Preisliste drucken, und überall dort,
wo es einen Lieferanten aus England gibt, soll dessen Name angedruckt
werden. Bei den
anderen Artikeln soll diese Ergebnis Spalte leer bleiben. 

Ein einfacher JOIN reicht hier nicht mehr. Der Versuch, das Ergebnis so
zu erzielen, wird scheitern: 

      
     SELECT A.ArtikelNr, B.Lieferant   
     FROM Artikel AS A, Lieferanten AS B WHERE A.LieferantID =
B.LieferantID     
     AND B.Land = 'GB';

Dieses Statement macht nicht das, was es soll. Die Ergebnismenge enthält
nur die Artikel mit englischen Lieferanten. Der Grund ist auch klar :
nur bei diesen
Artikeln ist die zweite WHERE-Bedingung hinter dem "AND" erfüllt. Wir
brauchen also etwas anderes : den OUTER JOIN. Der sieht so aus : 

      
     SELECT A.ArtikelNr, B.Lieferant 
     FROM Artikel AS A LEFT OUTER
     JOIN Lieferanten AS B ON A.LieferantID = B.LieferantIDWHERE B.Land
= 'GB';

Bei einem OUTER JOIN gibt es immer eine Tabelle, die als erhaltene
Tabelle bezeichnet wird; alle ihre Zeilen bleiben erhalten. Wenn es sich
um einen LEFT
OUTER JOIN handelt, ist die linke Tabelle (in unserem Beispiel Tabelle1)
die erhaltene Tabelle; bei einem RIGHT OUTER JOIN ist es die rechte
Tabelle
(Tabelle2). 

Die ON-Bedingung muß keine Gleichheits-Bedingung sein. Nehmen wir an,
Sie wollen für jeden Tag die Anzahl der Bestellungen zeigen, die vor
diesem Tag fällig
waren, und alle Tage sollen im Ergebnis enthalten sein. Das erfordert
wieder einen LEFT OUTER JOIN, und könnte so aussehen : 

     SELECT A.Tag, COUNT(B.BestellNr)  
     FROM Tage AS A LEFT OUTER JOIN
     Bestellungen AS B ON A.Tag > B.FaelligkeitsDatum;


[...]

// Zitat Ende

Gruss, Ruediger

Ralf Beutler schrieb:
> 
> hi,
> 
> ich habe eine kleine Frage.
> 
> Worin besteht der Unterschied zwischen einem
> left join und einem left outer join?
> Ich werde aus der Doku nicht schlau.
> Beim Ausprobieren erhalte ich immer dasselbe Ergebnis.
> 
> danke.
> 
> br | rb
> 



P.S. Besuchen Sie Intermediate auf der Midrange Welt (Frankfurt, 3./4.
Mai 2000) und dem Common Europe Congress (Bremen, 14. bis 18. Mai 2000).
Wir präsentieren aktuelle eBusiness-Lösungen auf der AS/400. Auf Anfrage
senden wir Ihnen gerne Informationsmaterial zu diesen Veranstaltungen zu
(mailto:info_(at)_intermediate.de).

---
*** Abmelden von dieser Mailingliste funktioniert per E-Mail
*** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive