繁体   English   中英

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

[英]From comma separated list to individual item result set. *mysql

我正在做一些数据从可怕设计的数据库迁移到一个不太可怕设计的数据库。 有一个多对多关系,其中一个表中的主键与另一个表中的逗号分隔列表相对应。

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具有的递归查询。

提前致谢。

对我来说,最简单的方法是编写一个查询源表并将记录插入目标表的脚本。

伪代码:

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;
    }
}

如果您有一个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) = ','

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM