sql中是否存在将一个表的缺失数据填充到另一个表的联接?

sql中是否存在将一个表的缺失数据填充到另一个表的联接?,sql,oracle,date,join,outer-join,Sql,Oracle,Date,Join,Outer Join,我想填写我创建的dates表中一个表中缺少的日期 我有所有日期的第一个表格是: 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 包含我的数据的第二个表是: Dates 01/11/2018 02/11/2018 03/11/2018 Name Value

我想填写我创建的dates表中一个表中缺少的日期

我有所有日期的第一个表格是:

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
包含我的数据的第二个表是:

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是带有名称的表。具有名称的表中至少有300000个名称,其中包含日期和值。

您需要使用
交叉联接来创建由2个名称x 3个日期=6行组成的结果。然后做一个
左连接

SELECT all_names.name, date_month.date, namevalue.value
FROM (SELECT DISTINCT name FROM namevalue) AS all_names
CROSS JOIN date_month
LEFT JOIN namevalue ON all_names.name = namevalue.name
                   AND date_month.date = namevalue.date
在SQLite3上试用过(如果需要,请进行相应调整)

查询是:

select name,val,d
  from (select distinct name,dates.d from dat join dates)
  left join dat using(name,d);

分区外部联接是填补稀疏数据空白的一种很好的方法。此联接允许我们根据列中的值重复联接。这种方法的连接比常规外部连接多,但比交叉连接小得多,并且应该比交叉连接解决方案更有效

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;

做一个外部连接!显示您的查询尝试。是否无效?您使用了什么查询?请发布。我们看不懂你的心思你的数据库是什么?只有2个值去和MA?或更多值?从表2 t1、表2 t2中选择*其中1=1在Oracle中,您可以使用“分区外部联接”:或非常好且简单的解决方案。非常感谢你。