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