从逗号分隔列表到单个项目结果集。 * MySQL的

时间:2010-05-06 15:21:03

标签: mysql select recursion

我正在进行一些数据迁移,从一个设计糟糕的数据库迁移到设计不那么糟糕的数据库。有一对多关系在一个表中有一个主键,对应于另一个表中的逗号分隔列表。

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有。

提前致谢。

2 个答案:

答案 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) = ','