2013-12-16 28 views
0

我有取值字段上的ID如何在逗号分隔字段中为每个值返回单行?

177,175,173,178,179 

什么是返回是空的任何地方,一个条目,以多个逗号分隔值在这一领域的SELECT语句。

如何根据此逗号分隔字段使用SQL为每个值返回1行?

+1

可能重复的[你可以拆分/爆炸MySQL查询中的字段?](http://stackoverflow.com/questions/471914/can-you-split-explode-a-field-in-a -mysql-query) –

+0

正在检查....... – mprototype

+0

你的意思是你想让多行的值与逗号分隔符连接,并且你想在一行下连在一起......... –

回答

1

正如已经在评论中提到的那样,考虑将数据规范化以便能够正常维护和查询您的数据。

在此期间,你有Tally(数量)表的帮助下,你可以创建一个这样

CREATE TABLE tally (n INT NOT NULL PRIMARY KEY); 
INSERT INTO tally 
SELECT a.N + b.N * 10 + 1 n 
    FROM 
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a 
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b 
ORDER BY n; 

实现纯SQL你的目标现在你可能看起来像

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(value, ',', n), ',', -1) value 
    FROM table1 CROSS JOIN tally 
WHERE id = 1 
    AND n <= 1 + (LENGTH(value) - LENGTH(REPLACE(value, ',', ''))) 

输出:

 
| VALUE | 
|-------| 
| 177 | 
| 175 | 
| 173 | 
| 178 | 
| 179 | 

这里是SQLFiddle演示

相关问题