Обновление строк в одной таблице данными из другой таблицы на основе одного столбца в каждой равных

Обновление много строк в одну таблицу из другой таблицы на основе одного столбца, в каждый из которых равен (ид_пользователя).

в обеих таблицах есть колонки ид_пользователя. Нужно вставить данные из Т2 в Т1, когда столбец ид_пользователя равны.

Заранее спасибо за любую помощь предложил.

Комментарии к вопросу (1)
Решение
update 
  table1 t1
set
  (
    t1.column1, 
    t1.column2
      ) = (
    select
      t2.column1, 
      t2.column2
    from
      table2  t2
    where
      t2.column1 = t1.column1
     )
    where exists (
      select 
        null
      from 
        table2 t2
      where 
        t2.column1 = t1.column1
      );

Или этот (если Т2.столбец1 <=> Т1.столбец1 много к одному и никому из них хорош):

update 
  table1 t1
set
  (
    t1.column1, 
    t1.column2
      ) = (
    select
      t2.column1, 
      t2.column2
    from
      table2  t2
    where
      t2.column1 = t1.column1
    and
      rownum = 1    
     )
    where exists (
      select 
        null
      from 
        table2 t2
      where 
        t2.column1 = t1.column1
      ); 
Комментарии (5)

Если вы хотите обновить соответствующие строки в T1 с данными из Т2, то:

update t1
set (c1, c2, c3) = 
(select c1, c2, c3 from t2
 where t2.user_id = t1.user_id)
where exists
(select * from t2
 where t2.user_id = t1.user_id)

В ", где существует" и часть его, чтобы предотвратить обновление Т1 столбцы значение null, где нет совпадений.

Комментарии (11)
merge into t2 t2 
using (select * from t1) t1
on (t2.user_id = t1.user_id)
when matched then update
set
   t2.c1 = t1.c1
,  t2.c2 = t1.c2
Комментарии (0)

Это'ы не Insert, если запись уже существует в T1 (значение user_id играм) если вы счастливы, чтобы создать дубликат функция user_id'ов.

Может потребоваться обновление?

UPDATE t1
   SET  = (SELECT 
                          FROM t2
                         WHERE t2.user_id = t1.user_id)
 WHERE EXISTS
      (SELECT 1
         FROM t2
        WHERE t1.user_id = t2.user_id);

Надеюсь, что это помогает...

Комментарии (3)

Вы всегда можете использовать и оставить "когда не совпали раздела"

merge into table1 FromTable   
   using table2 ToTable
     on     ( FromTable.field1 = ToTable.field1
          and  FromTable.field2 =ToTable.field2)
when Matched then
update set 
  ToTable.fieldr = FromTable.fieldx,
  ToTable.fields = FromTable.fieldy, 
  ToTable.fieldt =  FromTable.fieldz)
when not matched then
  insert  (ToTable.field1,
       ToTable.field2,
       ToTable.fieldr,
       ToTable.fields,
       ToTable.fieldt)
  values (FromTable.field1,
         FromTable.field2,
         FromTable.fieldx,
         FromTable.fieldy,
         FromTable.fieldz);
Комментарии (0)