如何合并两个表(包括主键和范围限制)
Posted
技术标签:
【中文标题】如何合并两个表(包括主键和范围限制)【英文标题】:how to merge two tables (incl. Primary Key and Range Limit) 【发布时间】:2015-01-13 10:41:19 【问题描述】:我昨天做了一个冒险并删除了 mysql 表中的一些行(幸运的是我设置了 LIMIT 2000)。
现在我想使用备份再次仅插入已删除的行。我得到了:
tb_production:
id (primary key) col1 col2
--------------------------------
1 data data
2 data data
6 data data
9 data data
如您所见,缺少行。 现在我想将备份表中缺失的行插入到(上面的)生产表中:
tb_backup:
id (primary key) col1 col2
--------------------------------
1 data data
2 data data
3 data data
4 data data
5 data data
6 data data
7 data data
8 data data
9 data data
我在 *** (How can I merge two MySQL tables?) 上找到了一个很好的答案,给出了答案:
INSERT IGNORE INTO table_1 SELECT * FROM table_2;
我不想再犯错,所以我问你:
如何将备份表中的行合并到生产表中,不覆盖生产表中的现有行并再次使用 LIMIT 2000?
【问题讨论】:
我不清楚你的问题....你有备份数据吗? @Vamshi.goli 是的,我有一个 2 周前的数据库备份,总比没有好。我想使用表中的行从那里插入到正在运行的数据库中。 现在你想把那些数据库插入到现有的数据库中吧!!!!!!!!! @Vamshi.goli 不,我只会从备份中转储表,将其插入生产数据库(之前重命名表),然后将备份表中缺少的行复制到使用的表中在生产数据库中。 生产表中的 id 值和备份表中的 id 值是一样的吗?......我想知道......你问过你不想覆盖的权利!!!!!!!!! 【参考方案1】:请尝试以下查询
INSERT INTO tb_production(id,col1,col2)
SELECT bkp.id,bkp.col1,bkp.col2 FROM tb_backup bkp LEFT JOIN tb_production prd
ON bkp.id=prd.id WHERE prd.id IS NULL ORDER BY bkp.id LIMIT 2000;
【讨论】:
以上是关于如何合并两个表(包括主键和范围限制)的主要内容,如果未能解决你的问题,请参考以下文章