用于在另一个表

时间:2017-01-12 19:52:53

标签: mysql sql

我有一个表A(列:id,年,月,金额)和表B(列:id,年,月,金额= 0)。

表A是主表,从2011年到2016年,每个月每个月都有一组相同的ID。

因为有些记录不存在(就像他们没有0334和2016年的123456 id和468976 amountk的记录),为此我想要添加ID为123456,03月和2016年的新记录表A和缺少的记录金额将为0。

缺少的记录来自表B,表B具有来自表A的相同的一组ID,并且对于从2011年到2016年每年每月的每个id,每行的数量为0。

注意: 1.在表A中,记录s未排序,表记录按ID,年和月分组。 2.如果可能,请使用普通的sql查询而不是pl / sql。如果不可能,请提出您的答案。

提前致谢........我希望你能解决问题陈述。

1 个答案:

答案 0 :(得分:0)

您可以使用cross join和更多逻辑生成记录:

select i.id, ym.year, ym.month
from (select distinct year, month from a) ym cross join
     (select distinct id from b) i left join
     a
     on a.year = ym.year and a.month = ym.month and b.id = i.id
where a.id is null;

(我认为我有ab的权利。我不确定为什么在问题中提到了两个单独的表。似乎a缺失了记录,因此它是唯一需要的表格。我最好的猜测是ba中的ID子集。)

这是执行插入的版本:

insert into a(id, year, month)
    select i.id, ym.year, ym.month
    from (select distinct year, month from b) ym cross join
         (select distinct id from b) i left join
         b
         on b.year = ym.year and b.month = ym.month and b.id = i.id
    where b.id is null;