关于sql:从mysql的逗号分隔文本列中查找不同的值

Find distinct values from comma separated text column of mysql

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Is storing a comma separated list in a database column really that bad?

我有一个逗号分隔文本的mysql db列:

1
2
3
4
5
6
  id  keys
 ------------
  1  Key1, Key2
  2  key3
  3  key2, key3, key4
  4  key5, key2

问题1

我需要这样的结果:

1
2
3
4
5
6
7
id    keys
----------
1    Key1
2    Key2
3    key3
4    key4
5    key5

问题2

另外,我需要第二个查询来匹配上述条件。 例如。

key2选择所有行

输出应该是

1
2
3
4
id
---
1
4

注意:仅在单个查询中,没有存储过程,没有功能。

我见过类似的问题,但没有得到理想的答案。

注意:感谢您建议不要将数据存储在逗号分隔字段中。
但我还没有开发出系统和数据库。 我正要做一个小升级。


这是一个临时解决方案,直到您重新设计表格。 由于CROSS JOIN,它的性能不会很好。 它还需要创建一个新的"数字"表:

1
2
CREATE TABLE Number
  ( i INT PRIMARY KEY );

用数字填充,直到单元格中预期的最大键数:

1
2
3
INSERT INTO Number
  VALUES
    (1), (2), ..., (1000) ;

然后运行它以在逗号分隔列中为您提供所有不同的键:

1
2
3
4
5
6
7
8
9
10
11
12
SELECT DISTINCT
    SUBSTRING_INDEX(
          SUBSTRING_INDEX(
                t.`keys`
              , ', '
              , n.i )
        , ', '
        , -1 ) AS `key`
FROM
    Number AS n
  CROSS JOIN
    YourTable AS t ;

测试于:SQL-Fiddle