使用一系列值更新表

时间:2015-05-27 18:58:15

标签: sql oracle sql-update

我正在寻找一种使用递增的日期序列来更新现有表格的方法。使用此选择有效:

SELECT
    TO_DATE('01-MAR-15') + (rownum * 2)
FROM all_tables
WHERE rownum <= 35

但是,我不能在更新查询中使用它。在Oracle中,我如何编写类似于此的更新表语句?

UPDATE my_table
SET my_date_column = (
    TO_DATE('01-MAR-15') + (rownum * 2)
)
WHERE my_keys IN (
    // my subquery here - select my_key from my_table where....
)

1 个答案:

答案 0 :(得分:2)

您可以使用merge语句,例如:

merge into my_table m
using (
  select my_key, date '2015-03-01' + (rownum * 2) dt
    from my_table where my_key in (1, 3)) u
on (m.my_key = u.my_key)
when matched then update set my_date_column = u.dt;

SQLFiddle

将子查询放在using子句中。 My_key必须是唯一的。