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 回答