복붙노트

[SQL] 다른 테이블의 데이터를 하나 개의 테이블에서 업데이트 된 행이 각각 동일하고 하나의 열에 기초

SQL

다른 테이블의 데이터를 하나 개의 테이블에서 업데이트 된 행이 각각 동일하고 하나의 열에 기초

각각이 동일 (USER_ID)에서 한 열을 기반으로 다른 테이블에서 하나 개의 테이블에 다수의 행을 업데이트.

두 테이블은 USER_ID 컬럼을 가지고있다. USER_ID 열이 동일한 경우 필요가 T1에서 T2로 데이터를 삽입한다.

제공되는 사전에 어떤 도움을 주셔서 감사합니다.

해결법

  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
          );
    

    또는이 (하나 그 사람에게 많다 t1.column1 경우 t2.column1이는 <=> 좋다)

    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
          ); 
    
  2. ==============================

    2.당신은 T2의 데이터로 T1에 일치하는 행을 업데이트하려면 :

    당신은 T2의 데이터로 T1에 일치하는 행을 업데이트하려면 :

    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)
    

    은 "존재하는"부분이 일치하는 항목이 없을 null로 T1 열을 업데이트하는 것을 방지합니다.

  3. ==============================

    3.

    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
    
  4. ==============================

    4.중복 USER_ID의를 만드는 행복하지 않으면 레코드가 이미합니다 (USER_ID 경기) T1에있는 경우는 삽입하지 않습니다.

    중복 USER_ID의를 만드는 행복하지 않으면 레코드가 이미합니다 (USER_ID 경기) T1에있는 경우는 삽입하지 않습니다.

    당신은 업데이 트를 할 수 있습니다?

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

    희망이 도움이 ...

  5. ==============================

    5.당신은 항상 사용하고 "일치하지 않는 부분"을 생략 할 수

    당신은 항상 사용하고 "일치하지 않는 부분"을 생략 할 수

    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);
    
  6. from https://stackoverflow.com/questions/7918688/update-rows-in-one-table-with-data-from-another-table-based-on-one-column-in-eac by cc-by-sa and MIT license