选择不同的SET值作为单个mysql列?

时间:2012-05-09 18:39:30

标签: mysql sql

假设我有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;

1 个答案:

答案 0 :(得分:0)

正如我在上面的评论中所提到的,您可能应该normalize您的数据,以便此问题完全消失。

但是,根据现状,人们需要加入一个包含所有可能的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