2011-12-11 70 views
0

請考慮以下事項: 3個表格: 用戶,企業和地址。通過複製將MySQL分開

用戶和企業的行都具有與地址中的行匹配的address_id字段。 由於一個錯誤(與默認值有關)我有一種情況,對於某些地址我有一個用戶和一個企業具有相同的地址ID。

我想將它拆分,以便它在一開始我有

Users.id , Users.address_id 
1  , 1 
2  , 2 
3  , 3 

Businesses.id , Businesses.address_id 
1    , 4 
2    , 3 
3    , 2 
4    , 5 

和地址有5列ID = 1〜5等一些信息列(城市國家等)。

我希望當前指向地址(3和2)的用戶(分別爲3和2)所使用的業務2和3將指向地址中的兩個新行,這些行將是原始行的副本。

即 將行6和7分別添加到將分別是行3和行2的副本的地址。 並設置相應Businesses.address_id (即

更新的企業應該是這樣的:

Businesses.id, Businesses.address_id 
1   , 4 
2   , 6 
3   , 7 
4   , 5 

這樣在地址中的每一行只能由其他兩個表中的一個使用,而數據語義學對保持相同。

回答

0

沒有完整的表結構,使這不可能完全寫那麼這裏的一些psudo代碼。

1)從地址選擇記錄內加盟商內部加入用戶的地址ID。這使我們獲得了當前共享的那些地址。

2)通過從插入到表插入到地址上述記錄(選擇也許?)

3)最後更新業務地址ID集合= MAX(addressID)其中地址字段=從currrent分配地址​​字段。 (因爲我們知道會有重複的地址),max會是最新的。

+0

如果我的地址不是唯一的,恐怕max可能會有問題。 (當然可以測試)。我正在考慮臨時在original_address_id中添加一列,並在上面提到的階段1中適當填充,然後在階段3中使用它進行更新。 – epeleg

+0

第2步將插入新記錄,因此MAX應該是最近創建的地址。如果你的地址已經有重複的地址,那麼你的權利,我不明白原來的問題。但可能有辦法找到屬於不屬於用戶的業務的地址,而不是插入/使用max來使用該ID。那麼2個業務可以共享相同的地址嗎? – xQbert

+0

我最終使用了步驟1和2,但爲舊ID添加了一個臨時列。這使我可以安全地修改指向舊行的行而不使用max。謝謝您的幫助。 – epeleg