【发布时间】:2014-10-05 14:29:25
【问题描述】:
我有两个 SQL 数据库。一个是另一个的旧备份。
我只想使用 ssh 或 phpMyAdmin 将 [user_database0] 中的 1 个特定表合并到 [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] 列中的数据。请注意,如果其他列数据发生更改,则应保持原样,仅应更新 [comment]。
总结(两个数据库在同一个服务器上的一个 phpMyAdmin 帐户)
FROM:[user_database0].[prefix_table].[content]
到:[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]
【问题讨论】:
-
合并是什么意思 - 仅更新列
comments两个表之间匹配或从备份中插入缺失的行? -
对不起,我的术语在这里可能是错误的,但我只是想在发生 id 匹配时替换旧数据库中的“cmets”列数据。不插入新行。目前正在测试下面的解决方案,看看是否可行。
-
那么下面的回答就可以了
-
不幸的是,下面的答案对我不起作用...由于 phpMyAdmin 中可能存在不同的语法?
-
您也用
mysql标记了问题,但您显示的语法是特定于 SQL Server 的。你到底在用什么?
标签: mysql sql phpmyadmin