mysql: Problemchen mit left join
Kjorni
- datenbank
0 Vinzenz Mai0 Kjorni
0 Vinzenz Mai0 Kjorni
Hi,
Kann ich bei einem Left Join auch mit Where-Klausel arbeiten?
Also:
select DISTINCT
r.ID,
r.Name,
...
z.zahl
from table1 r
LEFT JOIN table2 z
ON r.ID = z.ID
WHERE
z.zahl = 0 // <--
Table1:
ID - Name - usw.
Table2:
ID - usw. - zahl
Es geht also darum,
alle Einträge der Table1 in die Ergebnissmenge einzubeziehen, zu der es in Table2 keinen Eintrag gibt und
zu der es in Table2 zwar einen Eintrag gibt, dieser aber in der Spalte 'zahl' den Wert 0 hat.
Das aber erreicht obige Query natürlich nicht.
Ohne den Zusatz "WHERE z.zahl = 0" könnte ich in einer anschließenden Schleife in php abfragen, ob die Spalte 'zahl' den Wert 1 oder 0 hat.
Geht das auch in einer einzigen Query?
Grüße, Kjorni
Hallo,
Kann ich bei einem Left Join auch mit Where-Klausel arbeiten?
prinzipiell ja, aber ...
select DISTINCT
r.ID,
r.Name,
...
z.zahl
from table1 r
LEFT JOIN table2 z
ON r.ID = z.ID
WHERE
z.zahl = 0 // <--
natürlich nicht so. Dann kannst Du gleich einen INNER JOIN schreiben.
> Es geht also darum,
>
> 1) alle Einträge der Table1 in die Ergebnissmenge einzubeziehen, zu der es in Table2 keinen Eintrag gibt und
>
> 2) zu der es in Table2 zwar einen Eintrag gibt, dieser aber in der Spalte 'zahl' den Wert 0 hat.
> Ohne den Zusatz "WHERE z.zahl = 0" könnte ich in einer anschließenden Schleife in php abfragen, ob die Spalte 'zahl' den Wert 1 oder 0 hat.
>
> Geht das auch in einer einzigen Query?
klar. Hatten wir hier schobn öfter. Du möchtest die zweite Bedingung ebenfalls in die JOIN-Bedingung einbauen, vergleiche z.B.
</archiv/2008/4/t170482/#m1114517>
</archiv/2008/8/t175131/#m1150944>
Freundliche Grüße
Vinzenz
klar. Hatten wir hier schobn öfter. Du möchtest die zweite Bedingung ebenfalls in die JOIN-Bedingung einbauen, vergleiche z.B.
</archiv/2008/4/t170482/#m1114517>
</archiv/2008/8/t175131/#m1150944>
Hi Vinzenz,
habe ich versucht, umzusetzen:
select DISTINCT
r.ID,
r.Name,
...
z.zahl
from table1 r
LEFT JOIN table2 z
ON r.ID = z.ID
AND
z.zahl = 0
Aber dann erhalte ich einfach alle Werte, egal ob die Spalte 'zahl' gleich 0 oder 1 ist.
In meiner Ergebnissmenge steht dann als Spalte zahl immer 'NULL'.
Und nun?
Grüße, Kjorni
Hallo,
z.zahl = 0 // <--
Anmerkung: Zeilenkommentare in SQL beginnen mit -- nicht mit //
> 1) alle Einträge der Table1 in die Ergebnissmenge einzubeziehen, zu der es in Table2 keinen Eintrag gibt und
>
> 2) zu der es in Table2 zwar einen Eintrag gibt, dieser aber in der Spalte 'zahl' den Wert 0 hat.
sorry, hatte Dich falsch verstanden: Eine WHERE-Klausel mit
~~~sql
WHERE
[link:http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_coalesce@title=COALESCE](z.zahl, 0) = 0
sollte es tun.
Freundliche Grüße
Vinzenz
Hi Vinzenz,
Anmerkung: Zeilenkommentare in SQL beginnen mit -- nicht mit //
Danke. Wußt' ich nicht.
sorry, hatte Dich falsch verstanden: Eine WHERE-Klausel mit
WHERE
[link:http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_coalesce@title=COALESCE](z.zahl, 0) = 0
>
Und tut es auch :-)
Vielen Dank und viele Grüße
Kjorni