将单个结果中的SET作为多行返回

时间:2012-07-07 23:04:20

标签: mysql

我有一个MySQL 5.5表,其中包含一个包含SET数据类型的列。每个条目的SET列的值都在0到4之间。我想编写一个SELECT语句,它将为SET中的每个值返回一个单独的行。这可以用一个声明吗?

提前致谢, 彼得

修改

编辑包含一个例子:

表格结构非常基础:

  • INT(6)UNSIGNED PRIMARY KEY(id)
  • VARCHAR(20)UNIQUE INDEX(材料)
  • SET('Solid','Liquid','Gas','Plasma')(状态)

在上面的示例中,您可以想象有一个填充了各种材料(材质)的表,每个SET列都包含该材料可以存在的所有状态(状态)。我希望看到该语句返回材料具有的每个SET值的单独行,复制id和材料名称。

希望有助于澄清事情。

1 个答案:

答案 0 :(得分:3)

如果有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 Demo