MySQL通过复制分离

时间:2011-12-11 13:05:30

标签: mysql duplicates

考虑以下事项: 3桌: 用户,企业和地址。

用户和企业的行都有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

这样地址中的每一行只能由其他两个表中的一个使用,而数据语义保持不变。

1 个答案:

答案 0 :(得分:0)

没有完整的表格结构使得这不可能完全写入,所以这里有一些psudo代码。

1)从地址ID中的地址内部联接业务内部联接用户中选择记录。这可以获得当前共享的那些地址。

2)通过从(选择或许?)

中插入到表中来插入上述记录

3)最后更新业务地址ID set = max(addressID),​​其中地址字段=来自currrent分配的地址字段。 (因为我们知道会有重复的地址)max将是新的。