Sie möchten dafür einen äußeren Join (und Sie müssen person als "treibende" Tabelle verwenden)
SELECT person.person_id, COUNT(appointment.person_id) AS "number_of_appointments"
FROM person
LEFT JOIN appointment ON person.person_id = appointment.person_id
GROUP BY person.person_id;
Der Grund, warum dies funktioniert, ist, dass der äußere (linke) Join NULL
zurückgibt für diejenigen, die keinen Termin haben. Die Aggregatfunktion count()
zählt NULL
nicht Werte und somit erhalten Sie eine Null.
Wenn Sie mehr über Outer Joins erfahren möchten, finden Sie hier ein nettes Tutorial:http://sqlzoo.net/wiki/Using_Null