【发布时间】:2011-09-26 09:26:06
【问题描述】:
一直在寻找解决方案,
转到 (1) 或 (2) 以跳过说明, 首先我会解释一下情况。
我的公司已经升级了我们的 erp。系统,我的主要工作是创建公司其他人使用的列表,我从这个系统数据库中获取所有数据 在升级过程中,我们将一些数据转换为与新版本匹配,其中一些被留下,一些未被篡改,直接导出到新数据库, 它在单独的服务器上, 基本上它是成功的,新的ERP。系统按预期工作, 然而我的很多清单都被打破了, 我的列表使用的数据丢失/partly_missing/all_there
好的,所以问题是缺少旧数据库中我需要的数据,好的,新旧数据库上的联合应该能够做到这一点,但是我不想要重复的记录,“也转换到新数据库的数据存在于旧数据库中”因此两个字段可能存在“他们确实存在,我试过了”
所以 2. 我的解决方案的版本
我缺少主键“iseries 数据库”,所以我去连接一个 feilds 的组合来制作一个 uniqe 键,“解释我是如何做到的需要很长时间” 然而,它最终让我在两个数据库上创建一个联合视图,确保没有记录存在两次,
(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
)
【问题讨论】: