求一条 update语句
现在有 表Aid code name 其他很多列
1  a   小黑  。。 --旧
2  b   小白  。。 --旧
3  c   小辉  。。--旧
4  a   小黑  。。 --新
5  b   小白  。。 --新
6  c   小辉  。。 --新其中id 是主键! 非空 唯一现在我就想 把 新的 和 旧的的 PK建 也就是 id 互换一下 如何弄? 
新-旧 都是一对一的。
我最终的效果想弄成。
id code name 其他很多列
1  a   小黑  。。 --新
2  b   小白  。。 --新
3  c   小辉  。。 --新
4  a   小黑  。。 --旧
5  b   小白  。。 --旧
6  c   小辉  。。 --旧
这样 新旧 数据 互换!!!!!!!!

解决方案 »

  1.   

    业务场景是旧数据 已经被其他 表 已经引用。 而且在 显示的时候 也出来了
    但是 旧数据 需要 封存 启用新数据。但是原N多表 都已经引用旧数据了。 所以要通过 替换本表PK建 还达到  
    旧数据 变成 引用 新数据的。
    这个update如何做?
      

  2.   

    id code name xinjiu
    1 a 小黑 。。 --旧
    2 b 小白 。。 --旧
    3 c 小辉 。。--旧
    4 a 小黑 。。 --新
    5 b 小白 。。 --新
    6 c 小辉 。。 --新update 表 set xinjiu=decode('新','旧','旧','新','');
    game over
      

  3.   

    增加个临时字段
    update xjth set code1= (select a.code from xjth a where xjth.name = a.name and xjth.xj <> a.xj)update xjth set code = code1
      

  4.   

    update xjth set code1= (select a.code from xjth a where xjth.name = a.name and xjth.xj <> a.xj)update xjth set code = code1
    那就是时间不等于阿
      

  5.   

    -- 两种方法:但更新的效果是不一样的,其意义也不一样,看你的业务符合哪一种,就用哪一种!
    -- 新、旧互换!(不存在对应的新或旧,则不更新!)
    update a a1
    set a1.id=(select a2.id from a a2 where a2.code=a1.code and a2.name=a1.name and a2.xinjiu<>a1.xinjiu);-- 不管存不存在对应的新或旧均更新(更新字段“xinjiu”,只要是“新”则更新为“旧”,只要是“旧”则更新为“新”,不管是否存在对应的新或旧)
    update a set a.xinjiu=decode(a.xinjiu,'新','旧','旧','新',a.xinjiu);