考虑以下事项: 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
这样地址中的每一行只能由其他两个表中的一个使用,而数据语义保持不变。
答案 0 :(得分:0)
没有完整的表格结构使得这不可能完全写入,所以这里有一些psudo代码。
1)从地址ID中的地址内部联接业务内部联接用户中选择记录。这可以获得当前共享的那些地址。
2)通过从(选择或许?)
中插入到表中来插入上述记录3)最后更新业务地址ID set = max(addressID),其中地址字段=来自currrent分配的地址字段。 (因为我们知道会有重复的地址)max将是新的。