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中存储)。
-
@Mishu Sarker是的。但我不认为这需要子查询
-
@podiluska因为我不是开发这个系统和数据库的人。并感谢downvote
-
请读一下:在数据库列中存储逗号分隔列表真的那么糟糕吗?简短的回答是:是的,这真的很糟糕。
-
我同意@ypercube
-
-1到@bluefeet,但没有解决问题
-
@ypercube感谢您建议不要将数据存储在逗号分隔字段中。但我还没有开发出系统和数据库。我正要做一个小升级。
-
@ajreal我知道它没有解决问题,但限制允许使用的工具使得这几乎毫无意义。这可以通过使用函数来解决。
-
而现在你知道,即使是一个简单的查询,也会因为这么糟糕的设计而变得更糟糕。现在,如果你不能改变结构(这应该是第一选择),请发布更多细节。这些"钥匙"是什么?整数,字符串,大小等等?您有哪些其他(相关)表格?样本数据,每个表中的几行都很棒。
-
@ypercube key1它??是一个字符串,每行都有一个主键作为id你还需要什么样本数据与我在问题中提供的相同。
-
@champ最好的方法是重新设计这个模式,无论你在这个系统中扮演什么角色
-
@ajreal我不会在没有重新设计数据库的情况下这样做。请等我的答案
-
@Champ:以下哪个样本会更接近你的?:key1, key7, key3或Adam, George, Bill或"Adam","George","Bill"或Adam Jones, George Clooney, Bill Clinton
-
一个单元格中的最大键数是多少?
-
@ypercube Adam Jones, George Clooney, Bill Clinton和一个单元格中的最大键数不多..但可以是任何...
-
@champ那么你对功能的宗教异议是什么?
这是一个临时解决方案,直到您重新设计表格。 由于CROSS JOIN,它的性能不会很好。 它还需要创建一个新的"数字"表:
用数字填充,直到单元格中预期的最大键数:
然后运行它以在逗号分隔列中为您提供所有不同的键:
测试于:SQL-Fiddle
-
不确定这是否有效,但努力值得+1
-
@NicholasPickering Thnx。 我在SQLFiddle上添加了一个测试。