mysql - 使用 MySQL 选择不存在的数据

标签 mysql select

我正在尝试选择两个日期范围之间的数据。但是,并非所有数据都每天插入。下面是表格的示例:

mysql> SELECT * FROM attendance;
+------------+-------+
| date       | total |
+------------+-------+
| 2012-07-02 |   100 |
| 2012-07-04 |    70 |
| 2012-07-05 |    78 |
+------------+-------+
3 rows in set (0.00 sec)

场景是我想获得从 2012-07-02 到 2012-07-04 的出勤总数。根据上面的数据我会得到

mysql> SELECT * FROM attendance WHERE date BETWEEN '2012-07-02' AND '2012-07-04';
+------------+-------+
| date       | total |
+------------+-------+
| 2012-07-02 |   100 |
| 2012-07-04 |    70 |
+------------+-------+
2 rows in set (0.00 sec)

但是我的目标是将 2012-07-03 包含在结果中。

+------------+-------+
| date       | total |
+------------+-------+
| 2012-07-02 |   100 |
| 2012-07-03 |     0 |
| 2012-07-04 |    70 |
+------------+-------+

这可以通过 MySQL 完成吗?我确实调查了temporary table .但仍无法达到目的。

最佳答案

您可以将日期枚举为派生伪表(使用 UNION),然后将其与您的数据连接

SELECT dates.date, COALESCE(attendance.total,0) AS total FROM (
SELECT '2012-07-02' AS date
UNION ALL SELECT '2012-07-03'
UNION ALL SELECT '2012-07-04'
) AS dates
LEFT JOIN attendance USING(date)

编辑:添加了 COALESCE 以在丢失的记录上返回 0 而不是 NULL

关于mysql - 使用 MySQL 选择不存在的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11686003/

相关文章:

mysql - 确定如何检索结果集数据(node.js + sequelize + 外键mysql)

javascript - Angularjs 并使用包含 __proto__ 的数组进行选择

performance - SQL Server - 按客户和时间戳日期分组的 MAX Timestamp 行的主键

php - WordPress $wpdb->get_results 显示表格中的所有行

java - 连接 mysql 时通信链路失败

mysql - 具有连接和多个分组依据的 SQL 查询

MySQL:where 子句如何对 delete 语句无效但对 select 语句工作正常?

mysql - #1064 - 内部查询的 SQL 语法错误

mysql - INSERT INTO SELECT 不起作用

在字符串中使用点 (.) 搜索值时,MySQL 查询返回 0 行