2015-07-28 27 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

相關問題