2014-10-02 1 views
1

두 개의 SQL 데이터베이스가 있습니다. 하나는 다른 백업의 이전 백업입니다.특정 데이터베이스의 특정 테이블 열을 다른 데이터베이스로 병합

ssh 또는 phpMyAdmin 중 하나를 사용하여 [user_database0]에서 [user_database1]로 1 개의 특정 테이블 만 병합하고 싶습니다.

백업에서 복원하려는 테이블을 [prefix_table]이라고합니다.

그러나 [접두사] 테이블의 모든 열을 [주석] 열에 복원하고 싶지 않습니다. 내 가장 큰 우려의


하나는 [prefix_table]의 행의 일부가 삭제 된 나는 기존 데이터베이스에서 해당 삭제 된 행을 복원하지 않을 것입니다. 여기

은 예이다 :

* - 병합 [표 prefix_table][user_database0]에서 :

     prefix_table     
+---------------------------------------------------+ 
|  id  | name | comment | age | person_id | 
+++++++++++++++++++++++++++++++++++++++++++++++++++++ 
| 1111  | name1 | old text 1 | 01 | 001  | 
+------------+-------+------------+-----+-----------+ 
| 2222  | name2 | old text 2 | 02 | 002  | 
+------------+-------+------------+-----+-----------+ 
| 3333  | name3 | old text 3 | 03 | 003  | 
+------------+-------+------------+-----+-----------+ 
| 4444  | name4 | old text 4 | 04 | 004  | 
+------------+-------+------------+-----+-----------+ 

* -Into [표 prefix_table]에 [user_database1] :

     prefix_table     
+-----------------------------------------------------+ 
|  id  | name | comment | age | person_id | 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
| 1111  | namenew | new text 1 | 99 | 001  | 
+------------+---------+------------+-----+-----------+ 
| 4444  | name4 | new text 4 | 04 | 004  | 
+------------+---------+------------+-----+-----------+ 
| 5555  | name5 | text 1  | 05 | 005  | 
+------------+---------+------------+-----+-----------+ 
| 6666  | name6 | text 2  | 06 | 006  | 
+------------+---------+------------+-----+-----------+ 

* - 데이터베이스 [user_database1]을 결과 :

     prefix_table     
+-----------------------------------------------------+ 
|  id  | name | comment | age | person_id | 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
| 1111  | namenew | old text 1 | 99 | 001  | 
+------------+---------+------------+-----+-----------+ 
| 4444  | name4 | old text 4 | 04 | 004  | 
+------------+---------+------------+-----+-----------+ 
| 5555  | name5 | text 1  | 05 | 005  | 
+------------+---------+------------+-----+-----------+ 
| 6666  | name6 | text 2  | 06 | 006  | 
+------------+---------+------------+-----+-----------+ 

그래서 기본적으로 테이블 [prefix_table] 두 데이터베이스에서 일치하는 다음 [코멘트] 열에서 데이터를 덮어 있는지 확인해야한다. 다른 열 데이터가 변경되면 그대로 두어야하며 [주석] 만 업데이트해야합니다. 요약에서


(두 데이터베이스 하나 개에 phpMyAdmin 계정 같은 서버에) FROM

:.. user_database0] prefix_table [내용]

TO : user_database1]. [prefix_table]. [내용]

IF : [id] 열이 두 테이블에서 일치합니다.

UPDATE 
    [new_db_name].[table_name] 
INNER JOIN 
    [old_db_name].[table_name] 
ON 
    [new_db_name].[table_name].[column name] = [old_db_name].[table_name].[column name] 
SET 
    [new_db_name].[table_name].[matching column name] = [new_db_name].[table_name].[matching column name] 
+1

두 테이블 간의 일치 여부를 나타내는 merge-only 업데이트 열'comments'는 무엇을 의미합니까 아니면 누락 된 행을 백업에 삽입합니까? –

+0

죄송합니다. 내 용어가 여기에 잘못되었을 수 있습니다.하지만 ID 일치가 발생하면 이전 데이터베이스의 'comments'열 데이터를 바꿀뿐입니다. 새 행을 삽입하는 데 사용하지 마십시오. 현재 작동하는지 확인하려면 아래의 현재 테스트 솔루션. – Yevgen

+1

그럼 aswer 울부 짖는 소리가 괜찮아요 –

답변

1

다음은 작동합니다 : 여기


아래의 권고 사항에서 작업 버전입니다. 여기에서는 새로운 주석을 둘 다에서 일치하는 ID에 대한 이전 주석으로 업데이트합니다.

편집 : 올바른 방향으로 사용자를 알려야합니다. 나는 전에 당신의 스키마를 가졌고, 나는 당신이 쓴 것을 오해했습니다.

UPDATE [new_table_name] SET comment = [old_table_name].onecomment 
    FROM [new_table_name] 
    INNER JOIN [old_table_name] ON [new_table_name].aboutme_id = [old_table_name].aboutme_id 

참고 : 첫 번째는 잘못 태그에서 질문 이었기 때문에 위의 구문은 SQL 서버입니다.

+0

답장을 보내 주셔서 감사합니다. 나는 아직도 그것을 시험해보고, 다음과 같은 오류를 계속하려고하는 데 약간의 문제가있다 : (http://screencast.com/t/yj2NTIhwbeL). 관련성이 있고 다른 데이터베이스로 모든 것을 대체하려고했지만 오류는 동일했습니다. 또한, "tb_aboutme"인 두 데이터베이스 안에있는 실제 테이블 이름에 대한 언급이 없으며 쿼리의 일부가 아니어야합니까? – Yevgen

+0

dbold는 데이터베이스 사용자와 마찬가지로 데이터베이스 소유자를 의미합니까? 귀하의 예에서 "dbnew"는 무엇입니까? – Yevgen

+0

죄송합니다. 조금 더 혼란 스러웠습니다 .. [new_table_name] 님, [new_database_name]을 (를) 의미합니까? 다른 데이터베이스에있는 다른 테이블의 필드를 업데이트하려고합니다. 테이블 이름을 언급 할 때마다 데이터베이스 이름을 추가하고 작동하는지 확인합니다 : [new_database_name]. [new_table_name] – Yevgen

관련 문제