使用 MySQL 选择不存在的数据

Selecting Non-existent Data With MySQL(使用 MySQL 选择不存在的数据)
本文介绍了使用 MySQL 选择不存在的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to select data between two date range. However not all data are being inserted daily. Below is sample of the table:

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 获得总出勤率.根据上面的数据我会得到

The scenario is I want to get total of attendance from 2012-07-02 till 2012-07-04. Based on the data above I will get

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 包含在结果中.

However my objective is to have 2012-07-03 included in the result.

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

这可以通过 MySQL 完成吗?我确实研究了临时表.但是还是无法达到目的.

Is this possible to be done through MySQL? I did look into temporary table. But still unable to achieve the objective.

推荐答案

这是一个简单的解决方案的常见问题.

This is a common problem with a simple solution.

创建一个常规表,例如 REF_DATE,并将所有日期存储在其中,例如 3 年或您需要的任何时间跨度.

Create a regular table, say REF_DATE, and store in it all dates for like 3 years or whatever time span you would need.

然后使用这个表左边的一个LEFT OUTER JOIN

Then use this table on the left of a LEFT OUTER JOIN

SELECT REF.date,IFNULL(A.total,0) as total FROM REF_DATE REF 
LEFT OUTER JOIN attendance 
ON REF.date=A.date
A WHERE REF.date BETWEEN '2012-07-02' AND '2012-07-04';

DATE 是 MySQL 中的一个关键字,我在这里使用它是为了便于阅读.使用不同的列名.

DATE is a keyword in MySQL, I have used it here for readability. Use a different column name.

这篇关于使用 MySQL 选择不存在的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)
SQL/MySQL: split a quantity value into multiple rows by date(SQL/MySQL:按日期将数量值拆分为多行)