【问题标题】:Update oracle table referencing updated table / field? (Correlated update?)更新 oracle 表引用更新的表/字段? (相关更新?)
【发布时间】:2017-05-11 11:25:09
【问题描述】:

我有一个任务管理器,它会将一些信息放入与此类似的日志表中:

processId    owner      state            state_date
------------------------------------------------------------

1-88D6PJ     group1     OPENED           14/08/2013 14:57:44
1-88D6PJ     group2     ASSIGNED         14/08/2013 14:58:36
1-88D6PJ     group3     ASSIGNED         15/08/2013 11:26:45
1-88D6PJ     group2     ASSIGNED         17/08/2013 17:20:13
1-88D6PJ     group3     ASSIGNED         19/08/2013 09:05:12
1-88D6PJ     null       FINISHED         22/08/2013 12:13:59

任务完成后,所有者不会被存储。在代码中修复了它,但现在我想修复旧条目。

为此,对于所有者为空的每个条目,我需要搜索倒数第二个条目以获取所有者,这将与关闭任务的人相同。

我正在尝试一种方法,并且似乎与此类似的方法可行:

UPDATE tasks.tasks_log t1
   set (t1.owner) =
       (SELECT owner
          FROM (SELECT owner
                  FROM tasks.tasks_log t2
                 WHERE t1.processId = ep2.processId
                   and state not in ('FINISHED', 'CANCELLED')
                   and state_date is not null
                 ORDER BY state_date DESC)
         WHERE rownum = 1)

也许不是优雅或高效,但似乎它可以工作,但是当我运行它时,我收到 ORA-00904: "t1"."processId"invalid identifier。

我认为不可能引用更新的表标识符,但在检查了 oracle 文档和一些帖子后,我看到 similar UPDATES 应该可以工作。

可以参考吗?还是我必须完全改变进行此更新的方法?

【问题讨论】:

    标签: sql oracle correlated-subquery


    【解决方案1】:

    有几种方法可以做到这一点(例如merge)。但是用你的方法,你可以使用keep:

    UPDATE tasks.tasks_log t1
       set (t1.owner) = (SELECT MAX(t2.owner) KEEP (FIRST DENSE_RANK ORDER BY BY state_date DESC)
                         FROM tasks.tasks_log t2
                         WHERE t1.processId = ep2.processId AND
                               t2.state not in ('FINISHED', 'CANCELLED') AND
                               t2.state_date is not null
                        );
    

    【讨论】:

    • 非常感谢。工作得很好,因为这是我第一次看到这个,所以对了解更多信息很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2014-03-18
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2013-07-22
    相关资源
    最近更新 更多