Left join: on vs. where
am 01.09.2006 13:17:56 von Markus Ernst
Hallo
Eine Frage, die mich schon länger beschäftigt: In Fällen, wo eine
Bedingung entweder beim Join oder in der WHERE-Klausel angebracht werden
kann, was ist besser? Bsp.:
SELECT p.name
FROM personen AS p
LEFT JOIN firmen AS f ON p.firma=f.id
WHERE p.stellung='chef' AND f.branche='it'
vs:
SELECT p.name
FROM personen AS p
LEFT JOIN firmen AS f ON p.firma=f.id AND f.branche='it'
WHERE p.stellung='chef'
Danke für Kommentare!
--
Markus
Re: Left join: on vs. where
am 01.09.2006 13:51:52 von Thomas Rachel
Markus Ernst wrote:
> Hallo
>
> Eine Frage, die mich schon länger beschäftigt: In Fällen, wo eine
> Bedingung entweder beim Join oder in der WHERE-Klausel angebracht werden
> kann, was ist besser?
Das kommt drauf an, was Du willst.
> Bsp.:
>
> SELECT p.name
> FROM personen AS p
> LEFT JOIN firmen AS f ON p.firma=f.id
> WHERE p.stellung='chef' AND f.branche='it'
Das gibt Dir nur Chefs, die in der IT-Branche tätig sind, und ihre Firma.
> SELECT p.name
> FROM personen AS p
> LEFT JOIN firmen AS f ON p.firma=f.id AND f.branche='it'
> WHERE p.stellung='chef'
Das hingegen gibt Dir alle Chefs, entweder mit der Firma, sofern sie in IT
tätig sind, ansonsten mit NULLs.
Thomas
--
Die Verwendung von mehreren Ausrufezeichen macht die Aussage nicht
ausrufender sondern ausufernder. [Michael Bauer in dnq]
Re: Left join: on vs. where
am 01.09.2006 14:12:43 von Markus Ernst
Thomas Rachel schrieb:
> Markus Ernst wrote:
>
>
>>Hallo
>>
>>Eine Frage, die mich schon länger beschäftigt: In Fällen, wo eine
>>Bedingung entweder beim Join oder in der WHERE-Klausel angebracht werden
>>kann, was ist besser?
>
>
> Das kommt drauf an, was Du willst.
>
>
>
>>Bsp.:
>>
>>SELECT p.name
>>FROM personen AS p
>>LEFT JOIN firmen AS f ON p.firma=f.id
>>WHERE p.stellung='chef' AND f.branche='it'
>
>
> Das gibt Dir nur Chefs, die in der IT-Branche tätig sind, und ihre Firma.
>
>
>>SELECT p.name
>>FROM personen AS p
>>LEFT JOIN firmen AS f ON p.firma=f.id AND f.branche='it'
>>WHERE p.stellung='chef'
>
>
> Das hingegen gibt Dir alle Chefs, entweder mit der Firma, sofern sie in IT
> tätig sind, ansonsten mit NULLs.
Oh... wieder eine Feinheit von SQL, die mir bisher entgangen war. Danke
für die Klärung!
Markus