假设我有 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;
正如我在上面的评论中提到的,您可能应该规范化您的数据,以便这个问题完全消失。
但是,就现状而言,需要加入一个包含所有可能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