MySQL组加入空值

标签 mysql sql join

我正在尝试创建一个 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/

相关文章:

mysql - 查找并列出脚本中访问的所有 MySQL 表

sql - 查找具有所有 "win"、 "draw"和 "loss"结果的玩家

php - 如何左连接选择具有最高 user_id 的值

mongodb - 使用 rails 连接 mongodb 中的 2 个表

mysql - MySQL 中的排名函数

mysql触发器插入多对多

mysql - MySQL 中的 SmallInt 与 Date - 性能、灵活性和大小

sql - JOIN 和 INNER JOIN 之间的区别

c# - 如何在 linq-to-Nhibernate 中使用多个条件连接

php - 无法让 php 发布到 mysql