MySQL Select mit Outer Join
Olaf
- datenbank
0 Axel Richter0 Olaf
0 Ilja0 Olaf
Hallo,
ich habe ein kleines Problem mit folgendem Select:
SELECT user.uid, count( car_main.cnr ) FROM user LEFT OUTER JOIN car_main USING ( uid ) WHERE user.uid = 770 AND date_format( car_main.updated, "%d.%m.%Y" ) = "16.01.2004" GROUP BY cnr;
In der Tabelle stehen, wie der Name schon sagt, die User-Daten drin und in der Tabelle car_main ein paar Angaben zu den Autos der User. Ich möchte mit dem Select jetzt den User 770 ausgegeben haben. Wenn in der Tabelle car_main kein entsprechender Satz mit dem Datum 16-01-2004 in der Spalte updated enthalten ist, soll er trotzdem zumindest die User-ID ausgeben. Leider bekomme ich mit dem Select-Befehl aber nur die User-ID angegeben, wenn ich ein Datum wähle, zu dem ein Satz in der Tabelle für den User enthalten ist...
Weiß jemand Rat?
Gruß
Olaf
Hallo,
ich habe ein kleines Problem mit folgendem Select:
SELECT user.uid, count( car_main.cnr ) FROM user LEFT OUTER JOIN car_main USING ( uid ) WHERE user.uid = 770 AND date_format( car_main.updated, "%d.%m.%Y" ) = "16.01.2004" GROUP BY cnr;
Leider bekomme ich mit dem Select-Befehl aber nur die User-ID angegeben, wenn ich ein Datum wähle, zu dem ein Satz in der Tabelle für den User enthalten ist...
Klar, Du bekommst nur die Datensätze, die der WHERE-Klausel entsprechen, wie sollte es sonst sein? Meiner Meinung nach, wäre alles Andere falsch ;-))
SELECT user.uid, count( car_main.cnr ) FROM user LEFT OUTER JOIN car_main USING ( uid ) GROUP BY cnr HAVING user.uid = 770
viele Grüße
Axel
Hallo,
Klar, Du bekommst nur die Datensätze, die der WHERE-Klausel entsprechen, wie sollte es sonst sein? Meiner Meinung nach, wäre alles Andere falsch ;-))
Hmm, kenne ich aber so von ORACLE-DBs.
SELECT user.uid, count( car_main.cnr ) FROM user LEFT OUTER JOIN car_main USING ( uid ) GROUP BY cnr HAVING user.uid = 770
So bekomme ich ja auch count(car_main.cnr) > 0 für User, dessen Eintrag in car_main mit Spalte updated != 16.01.2004 ist. In diesen Fällen möchte ich aber als Ergebnis für den Count (0) haben. Deswegen hatte ich die where-Bedingung
date_format( car_main.updated, "%d.%m.%Y" ) = "16.01.2004"
noch eingebaut...
Verstanden oder zu umständlich formuliert?
Gruß
Olaf
yo,
mir ist nicht klar, warum die group by über die spalte cnr geht. aber versuch mal
SELECT user.uid, count(car_main.cnr)
FROM user LEFT OUTER JOIN car_main
ON (user.uid = car_main.cnr AND date_format(car_main.updated,"%d.%m.%Y")="16.01.2004" )
WHERE user.uid = 770
GROUP BY cnr;
Ilja
Hallo Ilja,
danke, das wars. Hier der korrekte Befehl:
SELECT user.uid, count( car_main.cnr)
FROM user
LEFT OUTER JOIN car_main ON ( user.uid = car_main.uid AND date_format( car_main.updated, "%d.%m.%Y" ) = "17.01.2004" )
WHERE user.uid = 770
GROUP BY 1
Ich ging davon aus, dass in ON nur Abgleichungen der beiden Tabellen reindürften...
Gruß
Olaf
yo,
mir ist nicht klar, warum die group by über die spalte cnr geht. aber versuch mal
SELECT user.uid, count(car_main.cnr)
FROM user LEFT OUTER JOIN car_main
ON (user.uid = car_main.cnr AND date_format(car_main.updated,"%d.%m.%Y")="16.01.2004" )
WHERE user.uid = 770
GROUP BY cnr;Ilja