2011-03-02 88 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