我需要使用同一个表的过去版本更新包含过去缺失信息的表。需要更新,因为最近的表中不再提供某些早期信息。 设tableA为time0的表,tableB为time1的表,依此类推。我真正感兴趣的是最后更新的表格。
到目前为止,我已尝试过这种方法;
create view _tableB
select *
from tableA
union
select *
from tableB a
where a.id not in (select id from tableA);
然后我继续:
create view _tableC
select *
from _tableB
union
select *
from tableC a
where a.id not in (select id from _tableB);
依此类推,直到我到达我的决赛桌,我创建了一张桌子。
create table _tableT
select *
from _tableS
union
select *
from tableT a
where a.id not in (select id from _tableS);
你在这里看到更好的东西吗?
P.S:我必须提到,对于每个观察,我可以有很多语言。信息是这样的id|lguage1|lguage2|lguage3|
我使用视图和this method将其设为wide2long。
id1|lguage1
id1|lguage2
id1|lguage3
id2|lguage1
信息不按ID和语言排序。
感谢。
答案 0 :(得分:1)
考虑到几个假设,你可以大大简化这一点:
1.每个单独的数据集都没有重复的ID
2.每个数据集按ID排序。
然后你只需这样做: 数据结果; set _tableS ... _tableC _tableB _table; 通过id; 如果first.id; 运行;
这样,代码更紧凑,所有数据只读一次。 它将读入所有表并输出交织结果(即:结果也将按ID排序)
firs.id过滤器意味着他只保留他遇到的每个id值的第一条记录。由于最新的数据集首先被提及,他将为每个ID提供最新的记录,并抛弃其他ID。