我正在尝试创建一个 MySQL 查询,该查询将返回与某个日期范围内创建的用户相关的客户数量。我有以下查询:
SELECT COUNT(`customer`.`user_id`) as `count`, `user`.`first_name`, `user`.`last_name`
FROM (`user`)
LEFT JOIN `customer` ON `user`.`id` = `customer`.`user_id`
WHERE `customer`.`date_created` >= '2014-03-27 23:41:28' AND `customer`.`date_created` <= '2014-04-04 00:41:28'
GROUP BY `customer`.`user_id`
ORDER BY `count`
LIMIT 5
如果我删除 where 子句,那么我会得到我期望的结果,包括空值:
count first_name last_name
0 Name Name
1 Name Name
3 Name Name
10 Name Name
问题是,当我引入 where 子句时,我没有得到没有计数值的返回行。谁能帮忙?
最佳答案
将您的 where 条件移动到 ON()
子句,这样它将过滤来自右表的结果而不是所有结果集,并且将为来自左表的不匹配结果产生 0 计数
SELECT COUNT(`customer`.`user_id`) as `count`,
`user`.`first_name`,
`user`.`last_name`
FROM `user`
LEFT JOIN `customer` ON (
`user`.`id` = `customer`.`user_id`
AND `customer`.`date_created` >= '2014-03-27 23:41:28'
AND `customer`.`date_created` <= '2014-04-04 00:41:28')
GROUP BY `user`.`id`
ORDER BY `count`
LIMIT 5
关于MySQL组加入空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22850524/