sql - sql中是否存在将一个表的缺失数据填充到另一个表的连接?
问题描述
我想从我创建的日期表中填写一个表中缺少的日期。
我有所有日期的第一个表是这个:
Dates
01/11/2018
02/11/2018
03/11/2018
我的数据的第二个表是这个:
Name Value Date
Go 1 01/11/2018
Go 3 02/11/2018
Ma 2 03/11/2018
我的最终输出应该是这样的:
Name Value Date
Go 1 01/11/2018
Go 3 02/11/2018
Go null 03/11/2018
Ma null 01/11/2018
Ma null 02/11/2018
Ma 2 03/11/2018
我尝试了一个完整的外部连接,但它没有用:
select b.name, a.d_date, b.value
from date_month a
full outer join namevalue b on a.d_date=b.d_date;
datemonth 是带有日期的表,namevalue 是带有名称的表。包含名称的表至少包含 300,000 个名称以及日期和值。
解决方案
分区外连接是填补稀疏数据空白的好方法。此连接允许我们根据列中的值重复连接。这种方法比常规外连接连接更多,但比交叉连接少得多,它应该比交叉连接解决方案更有效。
select name, value, dates.the_date
from dates
left join my_data
partition by (my_data.name)
on dates.the_date = my_data.the_date
order by name, the_date;
NAME VALUE THE_DATE
---- ----- --------
Go 1 2018-01-11
Go 3 2018-02-11
Go 2018-03-11
Ma 2018-01-11
Ma 2018-02-11
Ma 2 2018-03-11
示例架构:
create table dates as
select date '2018-01-11' the_date from dual union all
select date '2018-02-11' the_date from dual union all
select date '2018-03-11' the_date from dual;
create table my_data as
select 'Go' name, '1' value, date '2018-01-11' the_date from dual union all
select 'Go' name, '3' value, date '2018-02-11' the_date from dual union all
select 'Ma' name, '2' value, date '2018-03-11' the_date from dual;
推荐阅读
- docker - Visual Studio、Docker 和 Docker-Compose 实践
- c# - Azure 函数 5 和 EF Core 5 无法加载文件或程序集 > Microsoft.Extensions.DependencyInjection.Abstractions
- react-native - 无法使用 react-native 运行玩笑:TypeError:无法解构“未定义”或“空”的属性“仪器”
- javascript - Firebase 自定义验证电子邮件模板
- javascript - 嵌套异步/等待使用
- reactjs - 如何在 React 中用鼠标绘制矩形?
- php - Laravel - 任务调度或队列?
- templates - VBA Word 365 显示工作组模板供用户选择模板以创建文档
- javascript - 如何在反应使用状态字符串中添加新行
- java - MapStruct/映射接口字段/java