代码之家  ›  专栏  ›  技术社区  ›  Präriewolf

使用映射表更改大量记录键

  •  4
  • Präriewolf  · 技术社区  · 16 年前

       OLD_TO_NEW
    oldid   |   newid
    -----------------
    1234        0987
    7698        5645
    ...         ...
    

    id      |   data
    ----------------
    1234        'yo'
    7698        'hey'
    ...         ...
    

    id      |   data
    ----------------
    0987        'yo'
    5645        'hey'
    ...         ...
    

    这个预言机让我可以访问PL/SQL,我只是想避免它。

    5 回复  |  直到 14 年前
        1
  •  4
  •   David Aldridge    16 年前

    我会有一个独特的索引 OLD_TO_NEW.oldid 并在内联视图上更新:

    update (select id,
                   newid
              from old_to_new,
                   my_table
             where my_table.id = old_to_new.oldid)
    set id = newid
    
        2
  •  2
  •   Ramon    16 年前
    UPDATE base_table SET id = (SELECT newid FROM old_to_new WHERE oldid = id)
    

        3
  •  0
  •   Thorsten    16 年前

     create table temp as (
          select newid, data
          from old_to_new join my_table on my_table.id = old_to_new.oldid);
    

    然后截断旧表并将临时表复制到旧表中,或者删除旧表并重命名临时表。(注意:添加一些额外的语句来处理没有新值的记录。)

        4
  •  0
  •   HLGEM    16 年前

    首先进行数据库备份。我也会亲自在工作数据库中做一个表备份,以防出现问题,你需要赶紧回到旧的方式。

        5
  •  0
  •   Kuberchaun    16 年前

    这就是我在Microsoft SQL Server 2005中的操作方法。多年来一直无法访问Oracle数据库,因此这可能不适用于Oracle。

    UPDATE target_table
    SET id = newid
    FROM OLD_TO_NEW
    WHERE target_table.id = OLD_TO_NEW.oldid;