2010-06-15 4 views
2

흥미로운 문제가 있습니다. 간단한 답을 가지고 있지만 문서에서 찾을 수없는 것 같습니다.MySQL의 테이블 병합 -

다른 서버에 두 개의 데이터베이스 테이블이 있습니다. 이들은 동일한 기본 키가있는 동일한 테이블 스키마입니다.

한 서버에서 테이블을 병합하고 싶습니다. 그러나 Server1.Table1의 행이 Server2.Table2에 있으면 내가 지정한 열의 합계를 합산합니다.

표 1 { column_pk, counter }}; "TEST1"3 "TEST2"4

표 2 { column_pk 카운터 }; 내가 병합 그래서 후 "TEST1", 5 "TEST2", 6

원하는 :

"TEST1", 8 "TEST2",

(10)는 기본적으로 내가 mysqldump를 할 필요가 있지만, 대신 원시 INSERT 문을 차고, 나는 INSERT .. 할 필요가 중복 키 업데이트 문.

내 옵션에는 어떤 것이 있습니까?

모든 입력을 감사합니다, 감사합니다 4test가 실제 데이터로 대체된다

답변

0
INSERT INTO table_new (column_pk, counter) VALUES ('test',4) 
    ON DUPLICATE KEY UPDATE c=c+4; 

.

이러한 쿼리가 포함 된 내보내기 파일을 얻는 방법에 대해서는 정규 표현식을 사용하여 표준 내보내기를 수정하는 것이 좋습니다.

SELECT column_pk, SUM(counter) FROM 
(
    SELECT column_pk, counter FROM Server1.Table1 
    UNION ALL column_pk, counter FROM Server2.Table2 
) data 
GROUP BY column_pk 
INTO OUTFILE "dump.txt" 

그런 다음이로드 할 수 Anax

+0

내 최종 데이터로 다음

SELECT DISTINCT old_column_pk AS column_pk, SUM(old_counter) AS counter FROM newtable GROUP BY old_column_pk 

SQL 출력,하지만 그게 유일한 방법, 그렇다면. –

0

에 의해 제안처럼 또는 당신은 당신이 새로운 파일로 원하는 결과를 선택하는 쿼리를 사용할 수있는 동일한 테이블과 합계 그들까지 그들 모두를 삽입 파일을 대상 서버에 사용하십시오. LOAD DATA INFILE

EDIT : 여기 "Server1.Table1"은 가명이므로 실제로 작성할 수 없습니다. 다른 서버의 테이블을 로컬 인 것처럼 읽으려면 federated storage engine을 사용하십시오.

+0

그는 동일한 연결을 통해 server1과 server2에 어떻게 액세스 할 수 있습니까? 지금까지 여러 개의 테이블에 대해 동시에 여러 쿼리를 수행 할 수 있지만 여러 서버에서는 쿼리를 수행 할 수 없다는 것을 알고 있습니다 ... –

+0

페더레이션 저장소 엔진을 사용할 수 있습니다. – mdma

+0

이 환경에서 불가능한 모든 서버를 읽고 싶지 않습니다. 우리는 모두 독립적 인 결과를 산출하는 많은 작업자 작업을 가지고 있으며 주 데이터베이스는 모든 작업 결과를 통합 한 것입니다. –

0

나는 새에 두 테이블을 던진 것 (old_column_pk, new_pk old_counter)와 나는 바이올린을 켜는를 많이해야하지 기대했다