我有一张表:包含列的订单:
--------------------------------
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
答案 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 ;