2011-03-02 83 views
0

比方说,我有一张表,category,它有3列,id,parent_idname如何迁移递归表?

我有几个这样的表,我想合并成一个。目前,他们的ID会发生冲突(DB中不唯一),所以我需要重新给他们加上ID。如果我让idauto_increment我可以复制所有其他列就好了,但然后parent_id将不再正确连接。有什么神奇的方式可以让parent_id指向正确的新ID?

寻找类似

INSERT INTO newtable (parent_id, name) SELECT ???, name FROM oldtable 
+2

我想你可以添加一个old_id列,这样你仍然可以拥有原始ID,并且可以运行连续更新表以修改所有'parent_id'以指向新的auto_inc标识。显然你必须首先杀掉表中的任何外键需求,并在所有更改完成后重新创建它们。 – Patrick 2011-03-02 21:54:21

+0

没有魔法我想,你将不得不添加另一个包含old_id和new_id – rene 2011-03-02 21:54:40

+0

@Patrick的表:我可能必须这样做。 @rene:我认为使用1个额外的列比整个额外的表更容易。 – mpen 2011-03-02 22:05:17

回答

0

我想你可以添加一个old_id列,这样你仍然可以拥有原始的id,并且你可以运行连续的表更新来修改所有的parent_ids指向新的auto_inc标识符。你显然必须首先杀掉表上的任何外键要求,并在所有更改完成后重新设置它们 - Patrick

1

  • 如何生成一个新表包含新的标识沿着旧表和旧ID(OLDID,oldtablename)的名称列
  • 添加一个新列 'newparentid'
  • 更新每一行的newparentid是(SELECT newid FROM newtable nt WHERE oldtablename = row.oldtablename and nt.oldid = row.parent_id