可能重复:
Is storing a comma separated list in a database column really that bad?
我有一个逗号分隔文本的mysql db列:
id keys
------------
1 Key1, Key2
2 key3
3 key2, key3, key4
4 key5, key2
问题1
我需要这样的结果:
id keys
----------
1 Key1
2 Key2
3 key3
4 key4
5 key5
问题2
另外,我需要第二个查询来匹配上述条件。例如
选择key2
输出应为
id
---
1
4
注意:仅在单个查询中,没有存储过程,没有函数。
我见过类似的问题,但没有得到理想的答案。
注意:感谢您建议不要将数据存储在逗号分隔字段中。 但我还没有开发系统和数据库。我正准备进行小型升级。
答案 0 :(得分:2)
这是一个临时解决方案,直到您重新设计表格。由于CROSS JOIN
,它的表现不会很好。它还需要创建一个新的“数字”表:
CREATE TABLE Number
( i INT PRIMARY KEY );
使用数字填充,直到单元格中预期的最大键数:
INSERT INTO Number
VALUES
(1), (2), ..., (1000) ;
然后运行它以在逗号分隔列中为您提供所有不同的键:
SELECT DISTINCT
SUBSTRING_INDEX(
SUBSTRING_INDEX(
t.`keys`
, ', '
, n.i )
, ', '
, -1 ) AS `key`
FROM
Number AS n
CROSS JOIN
YourTable AS t ;
经过测试: SQL-Fiddle