【发布时间】:2014-02-11 18:27:22
【问题描述】:
我想看看是否有更好的方法来做到这一点。该语句将所有发生在 6 个月以上的行放入存档表中。然后它获取两个表中存在的所有 id 并将它们从主表中删除。有什么想法吗?
INSERT INTO ArchiveTable
SELECT *
FROM MainTable
WHERE DateItHappened < (SYSDATE - 180);
DELETE FROM MainTable a
WHERE a.ID IN (
SELECT b.ID
FROM ArchiveTable b
JOIN MainTable a
ON b.ID =
a.ID);
更新:
我继续执行下面 Joe 的建议,以使其成为最终代码。如果有人有任何需要更改的地方,请告诉我。
INSERT INTO ArchiveTable
SELECT *
FROM MainTable
WHERE DateItHappened < (SYSDATE - 180);
DELETE FROM maintable a
WHERE EXISTS (SELECT 1
FROM archivetable b
WHERE a.id = b.id)
【问题讨论】:
-
我认为你的方法很好。不工作?下面的答案......最好把它留在那里。
-
@ThrashBean 你指的是我的回答吗?如果有,请提供详细信息。
-
没有@Joe,对不起,第一个,关于 sql server。我在你回答之前写了我的评论。你的回答很好。
-
@ThrashBean 好的 - 只是确保!
-
代码可以运行,但我不是经验丰富的 Oracle 开发人员,所以我想确保我没有遗漏任何内容,因为这将在夜间进程中使用。