Ich habe eine Abfrage, die wie folgt aussieht. Es verwendet ein cte
:Linke Join Rückgabe der Anzahl von 1, obwohl keine Zeilen für diese Anzahl vorhanden sind?
SELECT d.hour,
hourkey,
range,
COUNT(*) as 'count'
FROM dimhour d
LEFT JOIN cte2
ON d.hour = cte2.hourkey
AND range IS NOT NULL
WHERE d.hour <= 23
GROUP BY d.hour,
hourkey,
range
ORDER BY d.hour DESC
Dies ist das Ergebnis dieser Abfrage ist:
hour hourkey range count
18 NULL NULL 1
17 NULL NULL 1
16 NULL NULL 1
15 15 99% 15
14 14 99% 15
13 13 99% 15
12 12 99% 15
11 11 99% 15
10 10 99% 15
Das Ergebnis cte2
ist zu groß, um eine Nachricht schreiben, aber ich kann Ihnen sagen, dass die Stunden, wo cte2.hourkey
ist null
Keine einzige Zeile innerhalb cte2
. Es gibt nichts nach Hr15, das möglicherweise eine positive Zahl für count(*)
zurückgeben könnte. Aber count(*)
gibt irgendwie 1 für diese zurück.
Warum gibt diese Abfrage eine count(*)
von 1 für nicht vorhandene Stunden zurück und wie kann ich sie entfernen?
Versuchen Sie 'count (cte2.hourkey)'. – Kateract
Es gibt '0' zurück, was besser ist, aber diese Zeilen werden immer noch im Ergebnis angezeigt. Und ich habe keine Ahnung, wie ich sie entfernen kann. – rbhat
Verwenden Sie dann einen 'inneren' Join, wenn Sie nicht möchten, dass die Nullwerte angezeigt werden, oder habe ich Sie falsch verstanden? – Sherlock