DB2查询:在历史记录表中插入数据(如果不存在)

DB2查询:在历史记录表中插入数据(如果不存在),db2,ibm-midrange,Db2,Ibm Midrange,我有历史表和交易表…和参考表。。。 若引用表中的状态为关闭,则在历史记录表中进行记录验证,若并没有,则从事务表中插入。。。。。像这样连接查询。。。。检查更好的一个。。。请给我一些建议。。这个查询可以用于海量数据吗 INSERT INTO LIB1.HIST_TBL ( SELECT R.ACCT, R.STATUS, R.DATE FROM LIB2.HIST_TBL R JOIN LIB1.REF_TBL C ON R.ACCT = C.ACCT

我有历史表和交易表…和参考表。。。 若引用表中的状态为关闭,则在历史记录表中进行记录验证,若并没有,则从事务表中插入。。。。。像这样连接查询。。。。检查更好的一个。。。请给我一些建议。。这个查询可以用于海量数据吗

 INSERT INTO LIB1.HIST_TBL               
( SELECT R.ACCT, R.STATUS, R.DATE FROM  
LIB2.HIST_TBL R JOIN LIB1.REF_TBL C     
ON R.ACCT = C.ACCT WHERE C.STATUS = '5' 
AND R.ACCT NOT IN                       
(SELECT ACTNO FROM LIB1.HIST_TBL)) ; 

如果您使用的是DB2fori的最新版本,请查看MERGE语句

MERGE INTO hist_tbl H
 USING (SELECT * FROM ref_tbl R
        WHERE r.status = 'S')
 ON h.actno = r.actno
 WHEN NOT MATCHED THEN
   INSERT (actno,histcol2, histcol3) VALUES (r.actno,r.refcol2,r.refcol3)
 --if needed
 WHEN MATCHED
   UPDATE SET (actno,histcol2, histcol3) = (r.actno,r.refcol2,r.refcol3)

谢谢你的回复。。。。我在v7R1上,还有两个条件。。。。。。。1 Hist_tbl是相同的,但在不同的库中2我有许多字段不能给出文件名。。。。在LIB1.HIST_TBL中插入select b.*from LIB2.HIST_TBL b join REF_TBL c on b.ACTNO=c.ACTNO,其中c.status='5',b.ACTNO不在select ACTNO from LIB1.HIST_TBL中;您真的不应该在生产代码中使用*。有很多方法可以获取当前字段的列表,并将列表复制到代码中。使用*时,将在表格式和代码之间创建依赖关系。还不如使用RPG。也就是说,如果你想这么做,语法是插入值。。。您在原始帖子中的两个条件由我发布的合并处理。NOT MATCHED(不匹配)处理不在LIB1.HIST_TBL中的ACTNO(从LIB1.HIST_TBL中选择ACTNO)我有两个不同的HIST_TBL库,您是否要将LIB1.HIST_TBL中不存在的记录插入到LIB2.HIST_TBL中?如果它们已经存在于LIB1中,会发生什么情况?我正在从LIB1.HIST_TBL中插入LIB1.HIST_TBL中不存在且从ref_TBL中具有状态“5”的记录。实际上是同一个文件,但有两个不同的环境…不清楚您想要什么。此部分b.*from HIST_TBL b join和此部分b.ACTNO不在select ACTNO from HIST_TBL中似乎相互排斥。如何从不存在的行中获取所有b.*列?以下是详细信息。。。这是一个示例,假设HIST_TBL只有3个字段插入LIB1.HIST_TBL H SELECT R.ACCT,R.STATUS,R.datefrom LIB2.HIST\u TBL R在T.ACCT=C.ACCT上加入LIB1.NCBTORDR C,其中C.STATUS='5'和R.ACTNO不在SELECT ACTNO FROM LIB1.ncbt中添加您的参考列R.ACCT、T.ACCT和R.ACTNO以及相关词H、R和C。您能清理这些列以使名称和相关词都正确匹配吗?否则就不清楚你到底想要什么。但这似乎是合理的。INSERT INTO LIB1.HIST_TBL SELECT R.ACCT,R.STATUS,R.datefrom LIB2.HIST_TBL R JOIN LIB1.REF_TBL C ON R.ACCT=C.ACCT,其中C.STATUS='5',R.ACCT NOT IN SELECT ACTNO FROM LIB1.HIST_TBL看起来好多了。现在有一个类似INSERT INTO。。。选择如果只运行“选择…”。。。在STRSQL或iNav中,它是否显示了所需的确切行?