0

SET データ型を含む列を持つ MySQL 5.5 テーブルがあります。各エントリの SET 列の値は 0 ~ 4 です。SET の値ごとに個別の行を返す SELECT ステートメントを書きたいと思います。これは単一のステートメントで可能ですか?

前もって感謝します、ピーター

編集

例を含めるように編集:

テーブル構造は非常に基本的です。

  • INT(6) 未署名の主キー (id)
  • VARCHAR(20) UNIQUE INDEX (マテリアル)
  • SET('Solid','Liquid','Gas','Plasma') (状態)

上記の例では、テーブルにさまざまな材料 (材料) が入力されており、それぞれの 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 フィドルのデモ

于 2012-07-08T00:43:55.903 に答える