使用Upsert逻辑如下:
插入源表与目标表的内连接时,在匹配更新金额字段时插入新记录。
insert into target (select * from source s, target t where s.year <> t.year); Update target T set T.amount = T.amount + S.amount from source S where T.year = S.year;
请参阅:
https://dba.stackexchange.com/questions/138409/fact-table-with-blank-dimensions/138515#138515
我面临的问题是试图将所有事实放在一个表格中。我了解到最佳实践是将事实分解到不同的表中以获得不同的粒度,并将列限制为事实所需的最小值。
这是插入数据的额外工作,但在检索期间确实是值得的,这是数据库工作的主要部分。