I am trying to get the records with count 0 using left join. I am using MySQL Database.
portal table:
SELECT * FROM portal;
id name
-----------
1 Barnet
2 Brexley
3 Balby
application table:
id portal_id updated
-----------------------------
1 1 2011-08-20
2 1 2011-08-20
3 1 2011-08-21
4 2 2011-08-21
5 2 2011-08-20
6 2 2011-08-20
7 2 2011-08-21
8 2 2011-08-21
Here is my query:
SELECT
portal.name, COALESCE(COUNT(application.id), 0) AS count
FROM
portal
LEFT JOIN
application ON application.portal_id = portal.id
GROUP BY portal.name;
Below is the output SQL Fiddle:
Name Count
--------------
Balby 0
Barnet 3
Brexley 5
But when I include a WHERE clause, I am not getting the records with count 0.
SELECT
portal.name, COALESCE(COUNT(application.id), 0) AS count
FROM
portal
LEFT JOIN
application ON application.portal_id = portal.id
WHERE
application.updated > '2011-08-20'
GROUP BY portal.name;
Output SQL Fiddle 2:
Name Count
--------------
Barnet 1
Brexley 3