如何在SQL中合并两个表生成日期与ID的全组合结果表
实现SQL中日期与ID的全组合(笛卡尔积)
嘿,这个需求其实很好解决——你需要的是SQL里的笛卡尔积(Cross Join),它会把日期集合里的每一个日期,和ID集合里的每一个ID进行配对,生成所有可能的组合,正好匹配你想要的结果。
场景1:日期和ID在同一个表中
如果你的日期和ID原本存放在同一个表(比如示例里的表),但需要先提取出所有唯一的日期和唯一的ID,再做组合:
-- 假设你的表名为your_table SELECT d.Date, i.ID FROM (SELECT DISTINCT Date FROM your_table) d CROSS JOIN (SELECT DISTINCT ID FROM your_table) i ORDER BY d.Date, i.ID;
场景2:日期和ID在两个不同的表中
如果日期单独存在dates表(只有Date列),ID单独存在ids表(只有ID列),直接用CROSS JOIN关联即可:
SELECT d.Date, i.ID FROM dates d CROSS JOIN ids i ORDER BY d.Date, i.ID;
结果验证
不管哪种场景,运行上述SQL后,都会生成你期望的全组合结果:
| Date | ID |
|---|---|
| 2017-12-25 | 1 |
| 2017-12-25 | 2 |
| 2017-12-25 | 3 |
| 2017-12-26 | 1 |
| 2017-12-26 | 2 |
| 2017-12-26 | 3 |
| 2017-12-27 | 1 |
| 2017-12-27 | 2 |
| 2017-12-27 | 3 |
简单说,CROSS JOIN就是不带任何连接条件的JOIN操作,它会返回两个表所有行的笛卡尔乘积,完全满足你要的“全组合”需求~
内容的提问来源于stack exchange,提问作者Yong Jin
相关产品推荐
相关产品推荐

