MySQL生成日期序列与表关联的 SQL 查询

1、内部日期序列生成

首先,让我们看一下内部日期序列的生成部分。这部分的作用是创建从 2024 年 4 月 1 日开始的日期序列,直到 2024 年 12 月 31 日。SQL 使用 DATE_ADD 函数和一个嵌套的子查询来生成这个日期序列。

sql 复制代码
SELECT DATE_ADD('2024-04-01', INTERVAL seq.seq DAY) AS DATE
FROM (
    SELECT (t3.num*100 + t2.num*10 + t1.num) AS seq
    FROM (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t1,
         (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t2,
         (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t3
) AS seq
WHERE DATE_ADD('2024-04-01', INTERVAL seq.seq DAY) <= '2024-12-31';

2、外部表关联

接下来,我们将日期序列与 yonghu 表进行连接。在这个例子中,连接条件是一个始终为真的条件 1=1,这将导致日期序列中的每个日期与 yonghu 表中的所有行进行连接。

sql 复制代码
SELECT dates.date, yonghu.姓名, yonghu.国家, yonghu.`id2`
FROM (
    -- 上面的日期序列生成查询
) AS dates
JOIN yonghu ON 1=1;

3、结果分析

最终的结果将包含从 2024 年 4 月 1 日到 2024 年 12 月 31 日的每一天,以及 yonghu 表中每一行的姓名、国家和 id2 列的数据。这种连接方式会生成一个笛卡尔积,因为日期序列中的每个日期都会与 yonghu 表中的所有行进行匹配。

4、完整代码

sql 复制代码
SELECT dates.date, yonghu.姓名, yonghu.国家,yonghu.`id2`
FROM (
    SELECT DATE_ADD('2024-04-01', INTERVAL seq.seq DAY) AS DATE
    FROM (
        SELECT (t3.num*100 + t2.num*10 + t1.num) AS seq
        FROM (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t1,
             (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t2,
             (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS t3
    ) AS seq
    WHERE DATE_ADD('2024-04-01', INTERVAL seq.seq DAY) <= '2024-12-31'
) AS dates
JOIN yonghu ON 1=1; 
相关推荐
永乐春秋8 分钟前
WEB-通用漏洞&SQL注入&CTF&二次&堆叠&DNS带外
数据库·sql
打鱼又晒网42 分钟前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
大白要努力!1 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
tatasix2 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql
南城花随雪。2 小时前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了2 小时前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
懒是一种态度2 小时前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
天海华兮2 小时前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql
gma9993 小时前
Etcd 框架
数据库·etcd
爱吃青椒不爱吃西红柿‍️3 小时前
华为ASP与CSP是什么?
服务器·前端·数据库