Vinzenz Mai: JOIN und WHERE bei vier Tabellen

Beitrag lesen

Hallo,

Explizite Join-Syntax ist übersichtlicher, leichter zu lesen und vermeidet Fehler [1] - und bei Outer Joins möchtest Du nicht die proprietäre Syntax Deines DBMS lernen, so denn eine existiert.

[1] dazu gibt es mindestens einen Thread in der aktuellen Forumshauptdatei.

Nee, OUTER JOINS will ich nicht, lieber garkeine.

OUTER JOINs sind tägliches Brot, meist in Form eines LEFT JOIN. OUTER ist normalerweise optional und wird daher üblicherweise weggelassen, sprich statt LEFT JOIN kann man auch LEFT OUTER JOIN schreiben.

Da

SELECT  
    spaltenliste  
FROM  
    a  
RIGHT JOIN  
    b  
ON  
    join-bedingung

äquivalent ist zu

SELECT  
    spaltenliste  
FROM  
    b  
LEFT JOIN  
    a  
ON  
    join-bedingung

nutzt übrigens so gut wie niemand RIGHT JOINs, selbst wenn diese vom DBMS implementiert sind (in vielen Fällen schreibt der Optimierer im einem ersten Schritt die RIGHT JOINs zu LEFT JOINs um :-)).

Daneben gibt es noch den FULL OUTER JOIN. Sollte dieser nicht implementiert sein (wie z.B. bei MySQL), so kann man diesen am einfachsten über

  
SELECT  
    spaltenliste  
FROM  
    b  
LEFT JOIN  
    a  
ON  
    join-bedingung  
UNION  
SELECT  
    spaltenliste  
FROM  
    a  
LEFT JOIN  
    b  
ON  
    join-bedingung  

Es sei denn, man verwendet eine 3er-Version von MySQL, die neben vielen anderen hochinteressanten und wichtigen Sachen noch nicht mal UNION beherrscht. Von einem Provider, der in punkto MySQL sowas antiquiertes anbietet, sollte man allerdings Abstand halten. Derzeit hat es eine Produktionsversion aus der 5.0er-Serie zu sein. 5.1 ist erst ein Release-Candidate und sollte produktiv noch nicht genutzt werden.

Freundliche Grüße

Vinzenz