Sql Cleanup 脚本,从一个不在另一个表中的表中删除
Posted
技术标签:
【中文标题】Sql Cleanup 脚本,从一个不在另一个表中的表中删除【英文标题】:Sql Cleanup script, delete from one table that's not in the other 【发布时间】:2015-07-28 12:36:00 【问题描述】:我们在 SQL(DB2) as400 中编写了一个清理脚本来清理表。 ps 我们正在修复导致数据问题的进程。
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
中被删除了。
【问题讨论】:
【参考方案1】:使用“不存在”而不是“0 =”:
DELETE FROM p6prodpf A WHERE NOT EXISTS (SELECT 1 FROM P6OPIPF B WHERE B.OPIID = A.OPIID)
【讨论】:
NOT EXISTS
是更好的选择。但我不明白这如何解决 OP 提到的问题。
另外,如果脚本在匹配记录添加到 P6OPIPF 之前运行,这也可以解释您的问题。
同意@GordonLinoff,NOT EXISTS
是一个更好的选择,但不应该有任何不同。在将记录添加到P6OPIPF
之前,Russ 可能在正确的轨道上运行脚本以从P6PRODOF
中删除。我建议使用日志来确定何时添加记录。
感谢您的意见,我将使用日志来确定何时添加记录以及发生的顺序。当我知道是什么导致我的问题时,我会更新答案。以上是关于Sql Cleanup 脚本,从一个不在另一个表中的表中删除的主要内容,如果未能解决你的问题,请参考以下文章
从表中选择字段,其中 id 不在 mysql 的另一个表中 [不工作]