有两张表 表2为表1的ID的关系 
比如:表2的数据为 col1  col2
                  1111       2222
表示2222是1111的扩展名
 
现在用SQL语句来实现 如果表一的ID为1111 则ID不变如果为2222 则改为1111
由于数据量很大 所以不能分开查然后在UNION在一起 谢谢大家啊

解决方案 »

  1.   


    现在有两张表:表1,表2
    表1的结构为:ID     COLLECT  ...
    数据为       1111   zzzz     ...
                 2222   dddd     ...
                 1111   xxxx     ...表2的数据为  ID1    ID2
                 1111   2222
                 1111   3333表2的数据的意思是:2222是1111的扩展名 3333是1111的扩展名
    现在要用SQL根据表2的关系把表1的数据改为
                 ID     COLLECT  ...
                 1111   zzzz     ...
                 1111   dddd     ...
                 1111   xxxx     ...
    我现在的办法是 select b.ID1,a.COLLECT from 表1 a,表2 where a.ID=b.ID2
                   union all
                   select ID,COLLECT from 表1 where ID not in (select ID2 from 表2)
    但是因为表的数据量很大(千万级) 所以效率太低 想请教以下有没有更好的办法?谢谢!!! 
      

  2.   

    select case b.id1 is null then a.id else b.id1 end,a.collect
    from 表1 a,表2 b
    where a.id = b.id2(+);
      

  3.   

    --更新表a
    update a set id=(select id2 from b where id2=a.id);
    --commit;
    --查询结果
    select * from a;