PostgreSQL LEFT JOIN: Sicherstellen, dass keine Zählungen zurückgegeben werden
Ein häufiges Problem bei LEFT JOIN
von PostgreSQL ist, dass Zeilen mit der Anzahl Null nicht zurückgegeben werden können. Dies tritt auf, wenn Filterbedingungen falsch platziert sind.
Berücksichtigen Sie diese Abfrage, die darauf ausgelegt ist, Prüfungselemente pro Organisation zu zählen, aber nur Organisationen zurückzugeben, deren Anzahl über Null liegt:
<code class="language-sql">select o.name as organisation_name, coalesce(COUNT(exam_items.id)) as total_used from organisations o left join exam_items e on o.id = e.organisation_id where e.item_template_id = #{sanitize(item_template_id)} and e.used = true group by o.name order by o.name</code>
Korrigieren der Abfrage
Das Problem liegt in der WHERE
-Klausel. Die hier platzierten Bedingungen filtern nach dem Beitritt und entfernen effektiv Null-Zählungsorganisationen. Die Lösung besteht darin, die Filterbedingungen in die JOIN
-Klausel selbst zu verschieben:
<code class="language-sql">SELECT o.name AS organisation_name, count(e.id) AS total_used FROM organisations o LEFT JOIN exam_items e ON e.organisation_id = o.id AND e.item_template_id = #{sanitize(item_template_id)} AND e.used GROUP BY o.name ORDER BY o.name;</code>
Durch die Integration der Filter in JOIN
stellen wir sicher, dass nur übereinstimmende Zeilen in den Join-Vorgang einbezogen werden. Dies verhindert den versehentlichen Ausschluss von Organisationen mit Nullzählungen.
Wichtige Hinweise:
COUNT()
s Verhalten: Im Gegensatz zu vielen Aggregatfunktionen gibt COUNT()
niemals NULL
zurück. Daher ist COALESCE(COUNT(col))
überflüssig.COUNT()
auf eine NOT NULL
-Spalte an oder stellen Sie sicher, dass die Join-Bedingung Nicht-Null-Werte garantiert.Das obige ist der detaillierte Inhalt vonWarum gibt mein LEFT JOIN in PostgreSQL keine Null-Zählungen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!