MySQL迁移脚本帮助

时间:2009-10-20 02:09:18

标签: sql mysql data-migration

我正在一个列出各种餐馆目录的网站上工作,目前正在切换到更新的CMS。我遇到的问题是,两个CMS都以不同的方式表示餐馆数据。

旧CMS

交叉引用数据库,因此它可以列出一个如下示例的条目:

ID / FieldID / ItemID / data

3/1/6/123 Foo Street

4/2/6 / Bar

将FieldID 1引用为街道,将FieldID 2引用为城市的一个参考表。

将ItemID 6引用为Delicious Restaurant的另一个参考表。

新CMS

当我设置示例列表时,数据库在新CMS上的方式是所有直接行,没有交叉引用。因此,相同餐厅的数据将是:

ID /姓名/街道/城市

3 /美味餐厅/ 123 Foo Street / Bar


大约有2,000家餐馆列表,因此在SQL行数据大小方面不是很大,但当然甚至不能考虑手动重新输入所有餐馆列表。

我有一些想法,但它会非常脏,需要一段时间,而且我不是MySQL专家,所以我在这里提出一些想法,我应该如何处理它。

非常感谢那些可以提供帮助的人。

1 个答案:

答案 0 :(得分:3)

您可以多次加入数据表以获得以下内容:

insert into newTable
select oldNames.ItemID,
       oldNames.Name,
       oldStreets.data,
       oldCities.data
from   oldNames
    inner join oldData as oldStreets on oldNames.ItemID = oldStreets.ItemID
    inner join oldData as oldCities on oldNames.ItemID = oldCities.ItemID
    inner join oldFields as streetsFields 
        on oldStreets.FieldID = streetsFields.FieldID
        and streetsFields.Name = 'Street'
    inner join oldFields as citiesFields 
        on oldCities.FieldID = citiesFields.Field
        and citiesFields.Name = 'City'

你没有为所有表提供名字,所以我写了一些名字。如果您需要提取更多字段,则扩展此类查询应该是微不足道的。