2014-10-02 4 views
1

У меня есть две базы данных SQL. Один из них - старая резервная копия другой.Объединить определенный столбец таблицы из одной базы данных в другую

Я хотел бы объединить только 1 конкретную таблицу из [user_database0] в [user_database1], используя либо ssh, либо внутри phpMyAdmin.

Эта таблица, которую я хочу восстановить из резервной копии, называется [prefix_table].

Однако я не хочу восстанавливать все столбцы из этой таблицы [prefix_table], только столбец [комментарий].


Один из моих самых больших проблем является то, что некоторые строки из [prefix_table] были удалены, и я не хочу, чтобы восстановить эти удаленные строки из старой базы данных.

Ниже приведен пример:

* - Merge таблицы [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  | 
+------------+-------+------------+-----+-----------+ 

* Таблица -в [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)

ОТ:.. [User_database0] [prefix_table] [содержание]

К: [user_database1]. [prefix_table]. [content]

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

Что вы подразумеваете под слиянием - только обновить столбец 'comments', где ther - совпадение между обеими таблицами или также вставить отсутствующие строки из резервной копии? –

+0

Извините, моя терминология может быть неправильной здесь, но я просто пытаюсь заменить данные столбца «комментарии» из старой базы данных, если встречается совпадение. Нет, чтобы вставить новые строки. В настоящее время тестируйте решение ниже, чтобы узнать, работает ли это. – Yevgen

+1

Тогда нижеприведенный абат –

ответ

1

Ниже будет работать. Здесь он обновляет новый комментарий со старого комментария для любых совпадающих идентификаторов в обоих.

Редактировать: Это должно указывать на правильное направление. Раньше у меня была ваша схема, я неправильно понял то, что вы написали, - мое плохое.

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 Server, потому что вопрос был в первый ошибочно помечено .

+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

Смежные вопросы