mysql - 如何为逗号分隔字段中的每个值返回单行?

标签 mysql

我有一个 select 语句,用于获取 ID 上的值字段

177,175,173,178,179

返回的内容可以是从 null(单个条目)到此字段中的多个逗号分隔值的任意位置。

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

最佳答案

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

与此同时,您可以在计数(数字)表的帮助下以纯 SQL 实现您的目标,您可以像这样创建该表

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;

现在你可能看起来像

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 演示

关于mysql - 如何为逗号分隔字段中的每个值返回单行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20603501/

相关文章:

MySQL 多重搜索条件不返回结果,但如果删除最后一行则有效

php - 使用 PHP 将两个输入插入到 mySQL 中的一列中

mysql - 对所有类别中最后添加的内容进行分组 (MySQL)

php - mysql_fetch_field 不工作

php - 计算给定标准费率和季节性日期范围的价格

php - 如何编写/优化需要从 6 个相关表中选择数据直到获得所需数据的 SQL 查询

php - 返回 "Query was empty"的 Mysql 计数查询

MYSQL - 无法添加外键约束 - 错误 1215

php 查询循环不起作用

MySQL ORDER BY 两个字段条件