一直在寻找解决方案一段时间了
转到 (1) 或 (2) 跳过描述,
首先我会解释一下情况。
我公司已经升级了我们的 erp。系统,我的主要工作是创建公司其他人使用的列表,我从该系统数据库中获取所有数据
在升级过程中,我们转换了一些数据以匹配新版本,其中一些数据被留下,一些数据没有被篡改,只是直接导出到新数据库,
它在一个单独的服务器上,
新的 ERP 基本上是成功的。系统按预期工作,
然而我的很多清单都被破坏了,
我的列表使用的数据丢失/partly_missing/all_there
好吧,问题是旧数据库中缺少我需要的数据,好吧,新旧数据库的联合应该能够做到这一点,但是我不想要重复的记录,“转换到新数据库的数据也存在于旧数据库”因此可能存在两个字段“他们确实如此,我尝试过”
所以2.我的解决方案的版本
我缺少主键“iseries 数据库”,所以我将多个字段组合起来制作一个唯一键,“需要很长时间来解释我是如何做到这一点的”
然而,最终我在两个数据库上建立了联合视图,确保没有记录存在两次,
(1)
这就是我现在得到的,
新旧表数据组合的视图
所有这些都是通过对“uniqe”键的检查而构建的......
每次我需要因升级而受影响的数据时,我都必须对每个表运行昂贵的查询,“有些表使用这些视图超过 40 次”
(问题1)我如何“成本有效”地从两个不同的模式/数据库获取数据并绑定在一起?
(2)
我唯一能想到的给我这种性能的就是创建索引而不是我构建的这些视图,但是直到现在我还没有找到任何关于如何做的信息,
(问题2)我可以在两个表上创建索引吗?
我的数据库是 as/400 - iseries
但是我对针对任何数据库类型的解决方案感兴趣,
我对资源非常灵活
:编辑:
用于创建视图的代码稍加修改,
SELECT
CTCONO,
CTDIVI,
CTSTCO,
CTSTKY,
CTLNCD,
CTTX40,
CTTX15,
CTPARM,
CTTXID,
CTRGDT,
CTRGTM,
CTLMDT,
CTCHNO,
CTCHID
FROM NEWDB.CSYTAB
UNION
SELECT * FROM OLDDB.CSYTAB
WHERE ( CTCONO,CTDIVI,CTSTCO,CTSTKY,CTLNCD ) NOT IN
(
SELECT A.CTCONO,A.CTDIVI,A.CTSTCO,A.CTSTKY,A.CTLNCD FROM NEWDB.CSYTAB A, OLDDB.CSYTAB B
WHERE A.CTCONO = B.CTCONO
AND A.CTDIVI = B.CTDIVI
AND A.CTSTCO = B.CTSTCO
AND A.CTSTKY = B.CTSTKY
AND A.CTLNCD = B.CTLNCD
)