繁体   English   中英

从单个结果返回SET作为多行

[英]Return SET from single result as multiple rows

我有一个MySQL 5.5表,其中的列包含SET数据类型。 每个条目的SET列都有0到4个值。 我想编写一条SELECT语句,该语句将为SET中的每个值返回单独的一行。 仅用一条语句就能做到吗?

预先感谢,彼得

编辑

编辑以包括一个示例:

该表的结构非常基本:

  • INT(6)未签名的主键(id)
  • VARCHAR(20)唯一索引(材料)
  • 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提琴演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM