LEFT JOIN mit COUNT-Funktion

sandroP

Erfahrenes Mitglied
Hallo,

ich habe eine Abfrage über zwei Tabellen und einer COUNT Funktion.
Das ganze bringt keine Fehlermeldung aber geht trotzdem nicht wie gewünscht.

Es sollen alle Datensätze pro Kundennummer gezählt werden,
(das geht soweit auch)
Es sollen aber auch Datensätze ohne "Inhalt" mit "NULL" ausgegeben werden.

Der aktuelle Code:
Code:
SELECT *, COUNT (*) AS anzahl
FROM  kundennummer   LEFT JOIN anfragen ON ( kundennummer.kdr = anfragen.kundennummer )
WHERE DATE( anfragen.datum ) = '2009-02-02'
GROUP BY kundennummer.kdr

Die Tabelle kundennummer (Mastertabelle mit allen kundennummern):

|kdr|
------
|22|
|24|
|67|

Die Tabelle anfragen:

|kundennummer| datum |
------------------------------------------
| 22 | 2009-02-02 |
| 67 | 2009-02-02 |
| 67 | 2009-02-02 |

So sollte eigentlich das Ergebnis sein:

| kdr | kundennummer | datum | anzahl |
----------------------------------------------------------------
| 22 | 22 | 2009-02-02 | 1 |
| 24 | NULL | NULL | 0 |
| 67 | 67 | 2009-02-02 | 2 |




Bin für Tipps sehr Dankbar....
 
Zuletzt bearbeitet:
Hallo sandroP,

zum einen benötigtst du einen LEFT OUTER JOIN um auch Datensätze ohne "anfrage" zu bekommen.
Zum anderen darf keine Einschränkung (WHERE DATE( anfragen.datum ) = '2009-02-02') auf "anfrage" existieren, das sonst die Datensätze ohne "anfrage" auch nicht angezeigt werden.
Hierfür verwendet man einen SUBSELECT, der die WHERE-Bedingung enthält.

Ausserdem musst du alle Felder, die angezeigt werden sollen, gruppieren.
Code:
SELECT     kundennummer.kdr, anfragen.kundennummer, anfragen.datum, COUNT(*) AS anzahl
FROM         kundennummer LEFT OUTER JOIN
                          (SELECT     kundennummer, datum
                            FROM          anfragen
                            WHERE  DATE( anfragen.datum ) = '2009-02-02'
) AS anfragen ON kundennummer.kdr = anfragen.kundennummer
GROUP BY kundennummer.kdr, anfragen.kundennummer, anfragen.datum
 
Danke für die Hilfe...

Ich habe es aber nur mit einem GROUP gelöst,
da ich sonst jeden Datensatz einzeln bekomme würde und somit "anzahl" immer
"1" betragen würde.

Code:
... AS anfragen ON kundennummer.kdr = anfragen.kundennummer
GROUP BY kundennummer.kdr


Vielen Dank es läuft!
 
Zurück