복붙노트

[SQL] 어떻게 두 MySQL의 테이블을 병합 할 수 있습니다?

SQL

어떻게 두 MySQL의 테이블을 병합 할 수 있습니다?

어떻게 동일한 구조를 가진 두 개의 MySQL의 테이블을 병합 할 수 있습니다?

나는이 점을 고려해야합니다 그래서 두 테이블의 기본 키가 충돌합니다.

해결법

  1. ==============================

    1.당신은 또한 시도 할 수 있습니다 :

    당신은 또한 시도 할 수 있습니다 :

    INSERT IGNORE
      INTO table_1 
    SELECT *
      FROM table_2
         ;
    

    이는 여전히 새로운 기본 키로 행을 삽입 할 때, 일치하는 기본 키가 그 table_2 사람들을 대체하도록 된 table_1 이들 행을 허용한다.

    또한,

    REPLACE
       INTO table_1
     SELECT *
       FROM table_2
          ;
    

    새로운 기본 키로 행을 삽입하는 동안, 이미 table_2의 해당 행으로 된 table_1 이들 행을 업데이트한다.

  2. ==============================

    2.그것은 기본 키의 의미에 따라 달라집니다. 그냥 자동 증가가 있다면, 다음과 같은 것을 사용 :

    그것은 기본 키의 의미에 따라 달라집니다. 그냥 자동 증가가 있다면, 다음과 같은 것을 사용 :

    insert into table1 (all columns except pk)
    select all_columns_except_pk 
    from table2;
    

    PK 뭔가를 의미하는 경우 우선 순위가되어야하는 기록을 확인할 수있는 방법을 찾을 필요가있다. 당신은 (cpitis 의해 답변을 참조) 최초의 중복을 찾을 수있는 선택 쿼리를 만들 수 있습니다. 그럼 당신은 유지하고 남아있는 레코드를 추가하려면 위의 인서트를 사용하지 않는 사람을 제거 할 수 있습니다.

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

    3.

    INSERT
    INTO    first_table f
    SELECT  *
    FROM    second_table s
    ON DUPLICATE KEY
    UPDATE
            s.column1 = DO_WHAT_EVER_MUST_BE_DONE_ON_KEY_CLASH(f.column1)
    
  4. ==============================

    4.수동으로 수행해야하는 경우, 한 시간 :

    수동으로 수행해야하는 경우, 한 시간 :

    첫째, 같은과 임시 테이블에 병합 :

    create table MERGED as select * from table 1 UNION select * from table 2
    

    그런 다음, 같은과 기본 키 제약 조건을 식별

    SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1
    

    어디 PK는 기본 키 필드는 ...

    중복을 해결합니다.

    테이블의 이름을 바꿉니다.

    [편집 - 제거 브래킷 아래 댓글에서 오류를 일으킨 UNION 쿼리에]

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

    5.그것은 소리가 나는 것처럼 복잡하지 .... 그냥 .... 쿼리의 중복 기본 키를 남겨 이 나를 위해 작동합니다!

    그것은 소리가 나는 것처럼 복잡하지 .... 그냥 .... 쿼리의 중복 기본 키를 남겨 이 나를 위해 작동합니다!

    INSERT INTO
      Content(
        `status`,
        content_category,
        content_type,
        content_id,
        user_id,
        title,
        description,
        content_file,
        content_url,
        tags,
        create_date,
        edit_date,
        runs
      )
    SELECT `status`,
      content_category,
      content_type,
      content_id,
      user_id,
      title,
      description,
      content_file,
      content_url,
      tags,
      create_date,
      edit_date,
      runs
    FROM
      Content_Images
    
  6. ==============================

    6.당신은 .. 당신을 위해 FK의를 업데이트하는 스크립트를 작성이 블로그 확인할 수 : http://multunus.com/2011/03/how-to-easily-merge-two-identical-mysql-databases/를

    당신은 .. 당신을 위해 FK의를 업데이트하는 스크립트를 작성이 블로그 확인할 수 : http://multunus.com/2011/03/how-to-easily-merge-two-identical-mysql-databases/를

    그들은 "ID"열을 얻기 위해 INFORMATION_SCHEMA 테이블을 사용하는 영리한 스크립트가 :

    SET @db:='id_new'; 
    
    select @max_id:=max(AUTO_INCREMENT) from information_schema.tables;
    
    select concat('update ',table_name,' set ', column_name,' = ',column_name,'+',@max_id,' ; ') from information_schema.columns where table_schema=@db and column_name like '%id' into outfile 'update_ids.sql';
    
    use id_new
    source update_ids.sql;
    
  7. from https://stackoverflow.com/questions/725556/how-can-i-merge-two-mysql-tables by cc-by-sa and MIT license