0

id (主キー列) と val 列 (いくつかの許可された値を持つ SET 型) があるとします。

set('a','b','c','d','e','f')

これらの値を列として選択する必要があり、最初の列はidです

+-----+------+
| id  | val  |
+-----+------+
| 102 | 'a'  |
| 102 | 'e'  |
| 102 | 'f'  |

これをどのように達成できるかわかりません..

select id, ???? from table where id = 102;
4

1 に答える 1

0

上記の私のコメントで述べたように、この問題が完全になくなるように、おそらくデータを正規化する必要があります。

ただし、現状では、可能なSET値がすべてレコードに含まれているテーブルと結合する必要がありSETます。そのテーブルの永続的なコピーを維持するか、UNIONサブクエリを使用して動的に作成することができます。

SELECT my_table.id, set_options.val
FROM my_table JOIN (
            SELECT 'a' AS val
  UNION ALL SELECT 'b' UNION ALL SELECT 'c' UNION ALL SELECT 'd'
  UNION ALL SELECT 'e' UNION ALL SELECT 'f'
) AS set_options ON FIND_IN_SET(set_options.val, my_table.val) > 0
WHERE id = 102
于 2012-05-09T18:57:45.297 に答える