我有一个MySQL 5.5表,其中包含一个包含SET数据类型的列。每个条目的SET列的值都在0到4之间。我想编写一个SELECT语句,它将为SET中的每个值返回一个单独的行。这可以用一个声明吗?
提前致谢, 彼得
修改
编辑包含一个例子:
表格结构非常基础:
在上面的示例中,您可以想象有一个填充了各种材料(材质)的表,每个SET列都包含该材料可以存在的所有状态(状态)。我希望看到该语句返回材料具有的每个SET值的单独行,复制id和材料名称。
希望有助于澄清事情。
答案 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