Left join: on vs. where

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
Markus Ernst [ Fr, 01 September 2006 13:17 ] [ ID #1452421 ]

Re: Left join: on vs. where

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]
Thomas Rachel [ Fr, 01 September 2006 13:51 ] [ ID #1452424 ]

Re: Left join: on vs. where

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
Markus Ernst [ Fr, 01 September 2006 14:12 ] [ ID #1452425 ]
Datenbanken » de.comp.datenbanken.mysql » Left join: on vs. where

Vorheriges Thema: Sub-Selects
Nächstes Thema: fehlende Spalten bei View in Access