itsource

두 MySQL 테이블을 병합하려면 어떻게 해야 합니까?

mycopycode 2022. 9. 27. 23:53
반응형

두 MySQL 테이블을 병합하려면 어떻게 해야 합니까?

구조가 같은 2개의 MySQL 테이블을 Marge하려면 어떻게 해야 합니까?

두 테이블의 프라이머리 키가 충돌하기 때문에 그것을 고려했습니다.

다음의 조작도 가능합니다.

INSERT IGNORE
  INTO table_1 
SELECT *
  FROM table_2
     ;

이를 통해 table_1의 행이 일치하는 기본 키가 있는 table_2의 행보다 우선하고 새 기본 키가 있는 행을 삽입할 수 있습니다.

또,

REPLACE
   INTO table_1
 SELECT *
   FROM table_2
      ;

는 table_1에 이미 있는 행을 table_2의 대응하는 행으로 갱신하고 새로운 프라이머리 키가 있는 행을 삽입합니다.

프라이머리 키의 의미에 따라 달라집니다.자동 인크리먼트의 경우는, 다음과 같이 합니다.

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

PK가 의미 있는 경우 우선 순위를 가져야 하는 레코드를 결정하는 방법을 찾아야 합니다.먼저 중복 항목을 찾기 위한 선택 쿼리를 만들 수 있습니다(cpitis에 의한 답변 참조).그런 다음 보관하지 않을 레코드를 제거하고 위의 삽입을 사용하여 남아 있는 레코드를 추가하십시오.

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)

수동으로 수행해야 하는 경우 한 번만:

먼저 다음과 같은 임시 테이블에서 병합합니다.

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 쿼리에서 괄호를 삭제하여 아래 코멘트에 오류가 발생하였습니다]

들리는 것만큼 복잡하지 않아...중복된 기본 키는 쿼리에서 제외합니다.이건 나한테 효과가 있어!

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

FK를 업데이트하기 위한 스크립트를 작성할 수 있습니다.다음 블로그를 확인해 주세요.http://multunus.com/2011/03/how-to-easily-merge-two-identical-mysql-databases/

이들은 information_schema 테이블을 사용하여 "id" 열을 가져오는 현명한 스크립트를 가지고 있습니다.

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;

언급URL : https://stackoverflow.com/questions/725556/how-can-i-merge-two-mysql-tables

반응형