我已经搜索了一段时间,寻找解决方案。
如果想跳过描述,请前往 (1) 或 (2),首先我会解释情况。
我们公司升级了ERP系统,我的主要工作是创建供其他人使用的列表,我从该系统的数据库中获取所有数据。 在升级期间,我们将一些数据转换为与新版本匹配的格式,有些被留下了,有些则没有被更改,直接导出到新的数据库中,这是在一个独立的服务器上完成的,基本上算是成功了,新的ERP系统运行正常,但我的很多列表都已经坏了,我的列表使用的数据缺失/部分缺失/全部缺失。
好的,问题是我需要从旧数据库中获取缺失的数据,用新旧数据库联合查询应该可以解决这个问题,但我不想要重复的记录。"将数据转换为新数据库后,也存在于旧数据库中"因此两个字段可能同时存在,"我试过了"
所以我的解决方案的第二个版本
我缺少"iSeries数据库"的主键,所以我连结一些字段组成唯一键,"花费太长时间来解释我是如何做到的",然而最终我还是创建了一个视图,在两个数据库上进行联合查询,确保没有重复的记录。
(1)现在我的解决方案如下,旧表和新表数据的组合视图,所有内容都建立在“唯一”键上进行检查....每次我需要从升级后受影响的数据中获取数据时,我必须对每个表运行一个昂贵的查询,"有些人使用这些视图超过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
)