将逗号分隔的 SQL 值转换为多行
常见的 SQL 任务涉及将单个单元格的内容拆分为多行。 例如,考虑这个表:
<code class="language-sql">id | name 1 | a,b,c 2 | b</code>
目标是像这样重组这些数据:
<code class="language-sql">id | name 1 | a 1 | b 1 | c 2 | b</code>
方法 1:利用数字表
一个有效的解决方案利用预先存在的“数字”表(包含整数的顺序列表的表)。 下面的查询演示了这种方法:
<code class="language-sql">SELECT tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name FROM numbers INNER JOIN tablename ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1 ORDER BY id, n</code>
方法二:动态生成数字(无需数字表)
如果专用数字表不可用,可以在查询本身内生成临时数字序列:
<code class="language-sql">SELECT tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name FROM (SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) AS numbers INNER JOIN tablename ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1 ORDER BY id, n</code>
请记住调整第二种方法中的 UNION ALL
部分,以容纳您在 name
列中预期的逗号分隔值的最大数量。 两种方法都实现相同的结果 - 将逗号分隔的值拆分为单独的行。
以上是如何将 SQL 中的逗号分隔值拆分为多行?的详细内容。更多信息请关注PHP中文网其他相关文章!