将特定表列从一个数据库合并到另一个数据库

时间:2014-10-02 20:04:04

标签: mysql sql phpmyadmin

我有两个SQL数据库。一个是另一个的较旧备份。

我想使用ssh或phpMyAdmin内部将[user_database0]中的一个特定表合并到[user_database1]。

我想从备份恢复的表称为[prefix_table]。

但是,我不想从该表[prefix_table]中恢复所有列,只需要还原[comment]列。


我最关心的一个问题是[prefix_table]中的某些行已被删除,我不想从旧数据库中恢复这些已删除的行。

以下是一个示例:

* - 来自 [user_database0] 的合并表[prefix_table]:

                      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       |
+------------+-------+------------+-----+-----------+

* - 进入 [user_database1] 中的表[prefix_table]:

                       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]是否匹配,然后覆盖[comment]列中的数据。请注意,如果其他列数据发生更改,则应保持原样,只应更新[注释]。


摘要(两个数据库位于一个phpMyAdmin帐户中的同一台服务器上)

FROM:[user_database0]。[prefix_table]。[content]

TO:[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 个答案:

答案 0 :(得分: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 Server,因为该问题最初被错误地标记为