2017-03-31 32 views
0

我感動的老螳螂表有一個varchar(64)CATEGORY_ID列具有int(10)CATEGORY_ID列一個新的螳螂表。MySQL的移動從varchar表爲int

簡化的結構如下

bug_table(舊DB)

+----+-------------+-------------+--------+ | id | project_id | category_id | report | +----+-------------+-------------+--------+ | 1 | 0 | Server | crash | | 2 | 0 | Database | error | | 3 | 1 | Server | bug | | 4 | 1 | Server | crash | +----+-------------+-------------+--------+

category_table(新DB)

+----+------------+----------+ | id | project_id | name | +----+------------+----------+ | 0 | 1 | Server | | 1 | 1 | Database | | 2 | 2 | Server | | 3 | 2 | Database | +----+------------+----------+

我需要一個神奇的查詢將取代category_idbug_table與數字category_idcategory_table。幸運的是,我可以匹配project_idname的類別。

這是我的工作,但已經得到了卡在複雜

UPDATE bug_table b SET b.category_id = c.id USING category_table WHERE b.category_id = c.name

回答

0

我喜歡不同於你一個新的查詢/參考表做處理這一一點任務查詢。

  1. 對我而言,新的類別表只有id和name列。基於樣本數據只有兩行:服務器和數據庫。是的,我意識到可能有其他名稱,但在繼續最大化隨後的id匹配之前,可以輕鬆地添加這些名稱,並且應該添加它們。

  2. 接下來,我會添加一個新的列到bug表中,可以被稱爲'category_new'與數據類型,將存儲新的類別id。或者,您可以將現有的category_id列重命名爲category,並且id的新列可以是column_id。

  3. 畢竟做到這一點,那麼你可以通過連接上名稱類別更新新列,並設置相匹配的ID:(這是假定在步驟2中提到的 - 其它方法)

    UPDATE bug_table JOIN category_table ON bug_table.category_id = category_table.name 
    SET bug_table.category_new = category_table.id 
    
  4. 之後運行,檢查新列以驗證更新的ID。

  5. 最後,在成功更新之後,現在可以刪除bugs_table中舊的category_id列(帶有名稱),並且可以將category_new列重命名爲category_id。

=====

請注意,如果你決定去與提到的其它列的方式,當然查詢將是類似的,但略有不同。然後在最後只需要一個列刪除

如果還有其他表應用相同的類別更改,則操作(基本上步驟2到5)對於這些表也是類似的。

+0

謝謝,我會給這個鏡頭。然而,project_id是不可或缺的,它是Mantis表的一部分,每個項目都有自己的類別。 – yallo