0

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

在此先感谢,彼得

编辑

编辑包括一个例子:

表结构非常基本:

  • INT(6) 无符号主键 (id)
  • VARCHAR(20) 唯一索引(材料)
  • SET('固体','液体','气体','等离子')(状态)

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

希望这有助于澄清事情。

4

1 回答 1

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 演示

于 2012-07-08T00:43:55.903 回答