Navicat如何巧妙合并MySQL两表导出新表?
- 内容介绍
- 文章标签
- 相关推荐
概述
主要聊如何在 Navicat 中将 MySQL 两张表巧妙合并。并导出为新的表或 Excel 文件,帮助读者解决常见的数据迁移、备份和报表需求。
痛点与挑战
1️⃣ 结构不一致导致合并失败: 两张表字段数量或类型不匹配时直接合并会报错。
2️⃣ 数据重复冗余: 业务中往往出现同一条记录在两张表都有,简单 UNION 会导致重复行。
3️⃣ 大量数据耗时长: 当两张表都拥有数十万甚至百万行时一次性执行 UNION All 可能导致服务器卡顿。
4️⃣ 导出格式多样化需求: 有时需要把结果直接导出到 Excel,有时则要先保存为 SQL 再导入到新数据库。
准备工作
检查表结构是否一致
# 查看字段列表
DESC bigdata_qiye_report;说起来,DESC bigdata_tech_improve_impl;# 如果字段不一致,可兼容的临时表
分别导出两张表的 SQL 文件
# 在 Navicat 中右键点击每个表 → 导出 → SQL 文件
# 保存为 bigdata_qiye_report.sql 与 bigdata_tech_improve_impl.sql
创建一个临时数据库
# 用于存放合并后的结果
CREATE DATABASE IF NOT EXISTS temp_merge;USE temp_merge;
一步步完成合并 & 导出操作
使用 UNION / UNION ALL 合并数据到新表
# 创建新表并合并
CREATE TABLE new_table AS
SELECT * FROM bigdata_qiye_report
UNION ALL -- 使用 ALL 保留重复记录;若想去重请改为 UNION
SELECT * FROM bigdata_tech_improve_impl;-- 若需要去重且字段顺序相同,可添加 DISTINCT 或 GROUP BY
-- CREATE TABLE new_table AS
-- SELECT DISTINCT * FROM (
-- SELECT * FROM bigdata_qiye_report
-- UNION ALL
-- SELECT * FROM bigdata_tech_improve_impl) AS tmp;其实,
处理重复记录
# 示例:按 id 去重,只保留第一条出现的记录
CREATE TABLE deduped_table AS
SELECT *
FROM (
SELECT *。ROW_NUMBER OVER AS rn
FROM (
SELECT * FROM bigdata_qiye_report
UNION ALL
SELECT * FROM bigdata_tech_improve_impl) AS combined
) AS t WHERE rn = 1;
大数据量建议分批处理或使用临时索引:
- Create index on merge key before inserting.
将合并结果直接导出到 Excel
# 在 Query Editor 输入上述 CREATE TABLE …或单独查询:
SELECT *
FROM new_table;# 运行后在结果面板右上角选择 “Export Resultset” → “Excel”。# 设置文件名,例如 merged_data.xlsx 并保存。
如果需要先保存为 SQL 再导入到目标数据库:
# 将上一步生成的新建语句复制到一个 .sql 文件,例如 merge_tables.sql
# 在 Navicat 打开目标数据库 → 右键 Execute Sql File → 选择 merge_tables.sql 并执行。# 执行后 new_table 将存在于目标库中,可进一步做分析或备份。话说回来,
再看执行小贴士。
- 请先在测试环境验证脚本是否正确。
- 如遇权限问题,请确认当前使用者拥有 CREATE、INSERT 权限。
- 若想让查询更快,可在临时/目标库中创建相应索引。
- 执行前可设置全局 sql_mode 防止因 STRICT 模式导致插入失败: `SET GLOBAL sql_mode='STRICT_TRANS_TABLES';不过,`
- 大文件下载后可以用 Navicat 的 Data Transfer 功能同步至其它服务器。
最终检查与验证步骤
-
查看 new_table 行数与原始两张表总行数是否一致。
SELECT COUNT FROM new_table;
SELECT MIN,MAX。COUNT FROM new_table;
如需进一步拆分,可以根据业务维度再做分区。
*若您还有更多 Navicat 或 MySQL 合并技巧需求,可以留言交流!* 👍 💬 📤 🗂️ 感谢阅读,共享知识,让数据更高效!*
概述
主要聊如何在 Navicat 中将 MySQL 两张表巧妙合并。并导出为新的表或 Excel 文件,帮助读者解决常见的数据迁移、备份和报表需求。
痛点与挑战
1️⃣ 结构不一致导致合并失败: 两张表字段数量或类型不匹配时直接合并会报错。
2️⃣ 数据重复冗余: 业务中往往出现同一条记录在两张表都有,简单 UNION 会导致重复行。
3️⃣ 大量数据耗时长: 当两张表都拥有数十万甚至百万行时一次性执行 UNION All 可能导致服务器卡顿。
4️⃣ 导出格式多样化需求: 有时需要把结果直接导出到 Excel,有时则要先保存为 SQL 再导入到新数据库。
准备工作
检查表结构是否一致
# 查看字段列表
DESC bigdata_qiye_report;说起来,DESC bigdata_tech_improve_impl;# 如果字段不一致,可兼容的临时表
分别导出两张表的 SQL 文件
# 在 Navicat 中右键点击每个表 → 导出 → SQL 文件
# 保存为 bigdata_qiye_report.sql 与 bigdata_tech_improve_impl.sql
创建一个临时数据库
# 用于存放合并后的结果
CREATE DATABASE IF NOT EXISTS temp_merge;USE temp_merge;
一步步完成合并 & 导出操作
使用 UNION / UNION ALL 合并数据到新表
# 创建新表并合并
CREATE TABLE new_table AS
SELECT * FROM bigdata_qiye_report
UNION ALL -- 使用 ALL 保留重复记录;若想去重请改为 UNION
SELECT * FROM bigdata_tech_improve_impl;-- 若需要去重且字段顺序相同,可添加 DISTINCT 或 GROUP BY
-- CREATE TABLE new_table AS
-- SELECT DISTINCT * FROM (
-- SELECT * FROM bigdata_qiye_report
-- UNION ALL
-- SELECT * FROM bigdata_tech_improve_impl) AS tmp;其实,
处理重复记录
# 示例:按 id 去重,只保留第一条出现的记录
CREATE TABLE deduped_table AS
SELECT *
FROM (
SELECT *。ROW_NUMBER OVER AS rn
FROM (
SELECT * FROM bigdata_qiye_report
UNION ALL
SELECT * FROM bigdata_tech_improve_impl) AS combined
) AS t WHERE rn = 1;
大数据量建议分批处理或使用临时索引:
- Create index on merge key before inserting.
将合并结果直接导出到 Excel
# 在 Query Editor 输入上述 CREATE TABLE …或单独查询:
SELECT *
FROM new_table;# 运行后在结果面板右上角选择 “Export Resultset” → “Excel”。# 设置文件名,例如 merged_data.xlsx 并保存。
如果需要先保存为 SQL 再导入到目标数据库:
# 将上一步生成的新建语句复制到一个 .sql 文件,例如 merge_tables.sql
# 在 Navicat 打开目标数据库 → 右键 Execute Sql File → 选择 merge_tables.sql 并执行。# 执行后 new_table 将存在于目标库中,可进一步做分析或备份。话说回来,
再看执行小贴士。
- 请先在测试环境验证脚本是否正确。
- 如遇权限问题,请确认当前使用者拥有 CREATE、INSERT 权限。
- 若想让查询更快,可在临时/目标库中创建相应索引。
- 执行前可设置全局 sql_mode 防止因 STRICT 模式导致插入失败: `SET GLOBAL sql_mode='STRICT_TRANS_TABLES';不过,`
- 大文件下载后可以用 Navicat 的 Data Transfer 功能同步至其它服务器。
最终检查与验证步骤
-
查看 new_table 行数与原始两张表总行数是否一致。
SELECT COUNT FROM new_table;
SELECT MIN,MAX。COUNT FROM new_table;
如需进一步拆分,可以根据业务维度再做分区。
*若您还有更多 Navicat 或 MySQL 合并技巧需求,可以留言交流!* 👍 💬 📤 🗂️ 感谢阅读,共享知识,让数据更高效!*

