在oracle sql开发人员中仅更新重复记录

时间:2019-09-10 13:26:46

标签: sql oracle

我的表结构是-

OBJID || Scheduled_Job_status || Started_On || scheduledJob2Order

我有一个表,其中存储有关运行统计信息的计划作业的详细信息。它基于ScheduledJob2Order + starts_on时间引用其他表。由于某些错误,它使用相同的startup_on时间和ScheduledJob2Order创建了多个记录。现在,我正在尝试添加一个约束,即它应仅创建1条具有相同Started_on时间的记录,但在此之前,我需要对当前重复记录进行更改。

我的问题是我无法删除重复的记录,但只能更新已经可用的started_on时间。另外,我只需要更新1条记录的started_on时间。假设我有3条重复的记录,其中我需要更新2条记录的started_on时间,但其余1条必须具有原始的started_on。

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

为什么不能删除重复的记录?如果是因为在其他表的记录中引用了它们,那么您需要首先更改这些记录中的外键值以指向您将保留的记录。然后,一旦没有对重复项的引用,您应该可以使用类似的内容将其删除:

    DELETE FROM tablex
    WHERE OBJID NOT IN 
        (SELECT MIN(OBJID)
         FROM tablex
         GROUP BY scheduledJob2Order, Started_On)

同样,这假设您可以在清除引用后删除。如果没有,您应该能够使用带有类似Started_On的{​​{1}}查询来更改UPDATE来找到它们。

更新:根据下面的OP注释,这是如何更新WHERE NOT IN (SELECT MIN(OBJID)列。对于任何重复的记录,它将日期设置为Jan-1-1900:

Started_On