我有一个数据库,由于服务器迁移导致的排序问题而被拆分。
我有一个
merge1
数据库,它是没有损坏数据的旧数据库,但它缺少较新的条目。我拥有
merge2
包含所有条目(旧的和新的)的数据库,但是许多旧的条目已损坏(新的条目没有问题)。两个数据库都在完全相同的 MariaDB 数据库服务器上,我已经知道如何执行数据库选择器之类的操作(
merge1.table3
)。root
我正在使用不向公众公开的MariaDB用户,因为我认为这纯粹只是内部维护。这两个数据库之间绝对没有数据库结构差异,并且在数据库合并完成之前不会发生任何结构变化,目前还没有任何计划。
information_schema.COLUMNS
到目前为止,我已经对数据库和表(TABLE_NAME
和)完成了大量工作,COLUMN_NAME
因此我有每个表的所有行的列表:
SELECT `COLUMN_NAME` FROM information_schema.`COLUMNS` WHERE `TABLE_SCHEMA`='merge1';
既然“大局”已经确立,我正在尝试确定是否以及如何通过动态构建查询来简化工作,因为有很多表,有些表有很多列。因此,假设表table3
有x
多个列(两列、几十列等。我已经知道该merge1
表有 200 个基本条目,所以我只需要INSERT
201+ 个(一个静态示例,以保持简单)。
以下是我粗略的非工作示例:
INSERT INTO merge1.table3
(
SELECT `COLUMN_NAME`
FROM information_schema.`COLUMNS` WHERE `TABLE_SCHEMA`='merge1'
)
VALUES
(
SELECT * FROM merge2.table3 information_schema WHERE id>200
);
问题似乎根源于插入的值,因为 MariaDB 似乎满足于SELECT
提供列名的子集。也许我没有动态构建查询的后半部分?
如何修复/改进查询以提供匹配的列名,而不必被迫静态定义它们?
感谢 Ergest Basha 和 nbk 的帮助评论,我能够通过以下方式将较新的记录复制到较旧的数据库中,而不会出现任何复杂情况或问题:
确实没有比这更简单的了。