2015-07-28 28 views
0

我们在SQL(DB2)as400中编写了一个清理脚本来清理表。我们正在修复导致数据问题的流程。Sql清理脚本,从一个不在其他表中的表中删除

的SQL:DELETE FROM p6prodpf A WHERE (0 = (SELECT COUNT(*) FROM P6OPIPF B WHERE B.OPIID = A.OPIID))

其简单的代码来检查,如果那里有在p6prodpf记录有没有记录在P6OPIPF然后删除记录在p6prodpf

我面临的问题是,即使P6OPIPF中有记录,也会删除p6prodpf

有没有更好的方式来做到这一点或更安全的方式..有没有任何理由可能会发生这种情况。

脚本早上凌晨3点运行。

它也感觉像是一个排序问题,但当我检查P6OPIPF中的记录时,它存在,但在p6prodpf中删除了它。

回答

2

使用 “NOT EXISTS”,而不是 “0 =”:

DELETE FROM p6prodpf A WHERE NOT EXISTS (SELECT 1 FROM P6OPIPF B WHERE B.OPIID = A.OPIID) 
+0

'不EXISTS' * *是一个更好的选择。但我不明白这是如何解决OP提到的问题的。 –

+0

另外,如果脚本运行之前匹配记录被添加到P6OPIPF,这也可以解释您的问题。 – Russ

+0

同意@GordonLinoff,“NOT EXISTS”是一个更好的选择,但不应以任何不同的方式工作。 Russ可能在正确的轨道上,脚本在将记录添加到“P6OPIPF”之前从“P6PRODOF”中删除。我建议使用期刊来确定何时添加记录。 – Charles

相关问题