Vous voulez une jointure externe pour cela (et vous devez utiliser person comme table "pilote")
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;
La raison pour laquelle cela fonctionne, c'est que la jointure externe (gauche) renverra NULL
pour les personnes qui n'ont pas de rendez-vous. La fonction d'agrégation count()
ne comptera pas NULL
valeurs et ainsi vous obtiendrez un zéro.
Si vous voulez en savoir plus sur les jointures externes, voici un bon tutoriel :http://sqlzoo.net/wiki/Using_Null