我正在进行一些数据迁移,从一个设计糟糕的数据库迁移到设计不那么糟糕的数据库。有一对多关系在一个表中有一个主键,对应于另一个表中的逗号分隔列表。
FK_ID | data
-------------
1,2 | foo
3 | bar
1,3,2 | blarg
有没有办法输出FK_ID字段,每个逗号分隔的元素作为结果集中的一行?
result set
FK_ID | data
-------------
1 | foo
2 | foo
3 | bar
1 | blarg
2 | blarg
3 | blarg
我认为这需要某种递归查询,我不认为mysql有。
提前致谢。
答案 0 :(得分:0)
对我来说,最简单的方法是编写一个查询源表并将记录插入目标表的脚本。
<强>伪代码:强>
query = "select * from sourcetable";
get a reader object;
while reading()
{
orig_FK = reader(FK_ID);
orig_data = reader(data);
orig_FK_array = orig_FK split by comma
foreach(ID in orig_FK_array)
{
query = "insert into targettable (ID, data) values (@ID, @Data);";
add parameters;
execute query;
}
}
答案 1 :(得分:0)
如果你有一个Numbers / Tally表,它是一个带有顺序整数列表的表,你可以在一个查询中完成。
Select Substring(T.FK_ID
, N.Value
, CharIndex(',', T.FK_ID + ',', N.Value) - N.Value)
, T.Data
From Numbers As N
Cross Join Table As T
Where N.Value <= Len(T.FK_ID)
And Substring(',' + T.FK_ID, N.Value, 1) = ','