Копировать данные из столбца в некоторых строках в другой столбец в других строках в Oracle - PullRequest
1 голос
/ 30 января 2012

тот же вопрос, что и здесь: Копировать данные из одной существующей строки в другую существующую строку в SQL?

но в Oracle, где update ... from и update t1, t2 не поддерживаются.

Я повторю это здесь своими словами; У меня есть таблица T, которая выглядит так:

table

и, как показывает стрелка, я хочу скопировать все из r, где c = 1, e, где c = 2, с соответствием t.

У меня есть оператор select, чтобы получить то, что я хочу скопировать:

select 
  told.t, 
  told.r
from 
  T told 
  inner join 
  T tnew
on 
  told.t= tnew.t
where 
  told.c = 1
  and 
  tnew.c = 2

Я просто не знаю, как объединить это в обновлении. Обновление Oracle, в частности.

Ответы [ 2 ]

4 голосов
/ 30 января 2012

попробуйте это:

update T tnew
set tnew.e = (select told.r from T told where told.c = 2 and told.t = tnew.t)
where tnew.c = 1
0 голосов
/ 30 января 2012

Звучит как время для массового сбора! Не так красиво, как решение AB Cade, но более эффективно.

declare

  c_data is
   select t1.rowid as rid, t2.r
     from my_table t1
     join my_table t2
       on t1.t = t2.t
    where t1.c = 2
      and t2.c = 1
          ;

   type t__data is table of c_data index by binary_integer;
   t_data t__data;

begin

   open c_data;
   loop

      fetch c_data bulk collect into t_data limit 25000;

      exit when t_data.count = 0;

      forall i in t_data.first .. t_data.last loop
         update my_table
            set e = t_data(i).r
          where rowid = t_data(i).rid
                ;

      commit;

   end loop;
   close c_data;

end;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...