phpbar.de logo

Mailinglisten-Archive

[php] OT: Welche MySQL Query?

[php] OT: Welche MySQL Query?

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Fre Dez 22 10:30:02 CET 2006


Hallo Michael,

Am Freitag, 22. Dezember 2006 10:03 schrieb Lutz Zetzsche:
> Am Freitag, 22. Dezember 2006 08:20 schrieb Michael Borchers:
> > Folgende Queries liefern das gleiche Ergebnis.
>
> wenn ich das richtig sehe, ist das Zufall. :-) Die zweite Abfrage ist
> doch ein INNER JOIN, während die erste ein LEFT OUTER JOIN ist, wenn
> ich jetzt nichts übersehen habe...

es ist noch etwas anders...

> > SELECT orders.orders_id, orders_products.products_name
> >
> > FROM orders
> >
> > LEFT OUTER JOIN orders_products ON orders_products.orders_id =
> >
> > orders.orders_id
> >
> > AND orders_products.products_name LIKE '%a%'
> >
> > WHERE orders.orders_id = orders_products.orders_id
> >
> > GROUP BY orders.orders_id
> >
> > LIMIT 100

Durch die WHERE-Bedingung hebelst Du das LEFT OUTER JOIN aus, weil eben 
gerade in einigen Fällen nicht orders.orders_id = 
orders_products.orders_id ist, so daß hier tatsächlich dasselbe 
Ergebnis herauskommt, wie bei einem INNER JOIN.

Also wie Yannik schon sagte, muß hier die WHERE-Bedingung weg. Dann 
stimmt auch wieder meine ursprüngliche Aussage. Abfrage 1 = LEFT OUTER 
JOIN, Abfrage 2 = INNER JOIN.

Wenn Du kein OUTER JOIN willst, nimmst Du also Variante 2. Die wiederum 
kannst Du auch noch so schreiben:

SELECT ... FROM ... INNER JOIN ... ON ... GROUP BY ...

Den Rest hat Yannik schon gesagt. :-)

> > SELECT orders.orders_id, orders_products.products_name
> >
> > FROM orders, orders_products
> >
> > WHERE orders.orders_id = orders_products.orders_id
> >
> > AND orders_products.products_name LIKE '%a%'
> >
> > GROUP BY orders.orders_id
> >
> > LIMIT 100


Viele Grüße
Lutz

php::bar PHP Wiki   -   Listenarchive