如何用SQL连接table1与table2生成包含全部日期的目标数据集?
解决方案
要实现这个需求,核心是合并两张表的日期数据,并将这些日期与table1中的ID和Name关联起来,以下是两种实用的SQL写法:
方式一:适配当前单一用户场景
如果table1里只有ID=1、Name=Paul这一组唯一的用户信息,可以直接合并日期后补充固定的ID和Name:
SELECT 1 AS ID, 'Paul' AS Name, Date FROM ( -- 合并table1和table2的所有日期,自动去重 SELECT Date FROM table1 UNION SELECT Date FROM table2 ) AS combined_dates ORDER BY Date;
方式二:通用多用户场景
如果table1中存在多组不同的ID+Name组合,先提取唯一的用户组合,再与合并后的日期做交叉关联:
SELECT t.ID, t.Name, cd.Date FROM ( -- 获取table1中不重复的ID和Name SELECT DISTINCT ID, Name FROM table1 ) AS t CROSS JOIN ( -- 合并两个表的所有日期 SELECT Date FROM table1 UNION SELECT Date FROM table2 ) AS cd ORDER BY t.ID, t.Name, cd.Date;
关键说明:
UNION会自动去除重复日期,如果业务需要保留重复的日期记录,替换成UNION ALL即可。- 加上
ORDER BY Date可以让结果按日期排序,和你期望的输出格式完全匹配。
内容的提问来源于stack exchange,提问作者bush
相关产品推荐
相关产品推荐

