通过匹配单个表的多个列逗号分隔值来创建多个列

时间:2015-01-03 10:42:15

标签: mysql

我有一张表:包含列的订单:

--------------------------------
id | liquids| strength
--------------------------------
1  | 1,2,3  | 10,12,13
2  | 2,3,4  | 12,13,18
--------------------------------

我想要输出如下:

--------------------------------
id | liquids| strength
--------------------------------
1  | 1      | 10
1  | 2      | 12
1  | 3      | 13
2  | 2      | 12
2  | 3      | 13
2  | 4      | 18

2 个答案:

答案 0 :(得分:0)

如果没有自定义处理,似​​乎是不可能的。看一下这篇文章:http://kedar.nitty-witty.com/blog/mysql-stored-procedure-split-delimited-string-into-rows

您的表结构在数据库世界中并不是最佳的。在大多数情况下,您应该将数据保持已分隔为行。如果要转换数据库,请使用脚本语言。如果您想要动态执行并保持数据不变,请重新考虑转换。这对您的数据进行操作确实很有帮助。

答案 1 :(得分:0)

正如a_horse_with_no_name所说,请参阅规范化 - 但类似下面提供的示例可能是迈向它的一步。请注意,在此示例中,ints是一个简单的整数表(i),从0到9,my_table就是你的表。

SELECT id,IF( LENGTH( liquids ) - LENGTH( REPLACE( liquids, ',', '' ) ) + 1 >= i,
             SUBSTRING_INDEX(SUBSTRING_INDEX(liquids, ',', i), ',', -1),
             ''
) +0 liquid,
IF( LENGTH( strength ) - LENGTH( REPLACE( strength, ',', '' ) ) + 1 >= i,
             SUBSTRING_INDEX(SUBSTRING_INDEX(strength, ',', i), ',', -1),
             ''
) +0 strength 
FROM my_table,ints HAVING liquid > 0 ;