我有一个MySQL 5.5表,其中一列包含SET数据类型。SET列的每个条目都有0到4个值。我想写一个SELECT语句,它将为SET中的每个值返回一个单独的行。一句话就能做到吗?
提前感谢,Peter
编辑
编辑后包含一个示例:
表格结构非常基本:
- INT(6)未点火主键(id)
- VARCHAR(20)UNIQUE INDEX(材料)
- SET("固体"、"液体"、"气体"、"等离子体")(状态)
在上面的例子中,你可以想象有一个由各种材料(材料)填充的表,每个材料的SET列包括该材料可以存在的所有状态。我希望看到该语句为材料的每个SET值返回一个单独的行,重复id和材料名称。
希望这有助于澄清问题。
如果有20种可能的状态,但一种材料最多只能有4:
试试这个解决方案:
SELECT
a.material,
a.states
FROM
(
SELECT material, SUBSTRING_INDEX(states,',',1) AS states
FROM settbl
UNION
SELECT material, SUBSTRING_INDEX(SUBSTRING_INDEX(states,',',-3),',',1) AS states
FROM settbl
UNION
SELECT material, SUBSTRING_INDEX(SUBSTRING_INDEX(states,',',-2),',',1) AS states
FROM settbl
UNION
SELECT material, SUBSTRING_INDEX(states,',',-1) AS states
FROM settbl
) a
ORDER BY
a.material
SQL Fiddle演示