MySQL从单个列中用空格分隔的不同单词

MySQL从单个列中用空格分隔的不同单词,mysql,distinct,Mysql,Distinct,假设我有一列标签。此标记由空格分隔 |tags | |apple banana melon | |apple banana pineapple| |apple melon pineapple | 我想得到列中所有的单词标签,用空格隔开,并删除重复的单词。所以我将得到如下输出: |unique_tags| |apple | |banana | |melon | |pineapple | 如何在mysql中实现这一点?首先,您

假设我有一列标签。此标记由空格分隔

|tags                  |
|apple banana melon    |
|apple banana pineapple|
|apple melon pineapple |
我想得到列中所有的单词标签,用空格隔开,并删除重复的单词。所以我将得到如下输出:

|unique_tags|
|apple      |
|banana     |
|melon      |
|pineapple  |

如何在mysql中实现这一点?

首先,您应该更好地重构数据库模式

但我看到很多这样的问题,我更喜欢这个解决方案

如果您同意,您可以通过以下方式对其进行调整:


请注意,您必须创建包含记录数和连续值的
数字表,直到
标记
字段列表中预期的最大数字值。

选择并分离所有标记;将结果放入临时表中,然后从临时表中选择distinct。请参见此-使用select distinct。。。将消除重复这是更可怕的,没有额外的表:真的吗<代码>选择1 n全部联合选择2全部联合选择3全部联合选择4
您喜欢此解决方案吗?儿子,你会有10个元素还是20个?你的问题看起来很糟糕。我真的更喜欢创建一个简单的表并保持查询的可读性。但这取决于你:-)
SELECT DISTINCT
  SUBSTRING_INDEX(SUBSTRING_INDEX(t1.tags, ' ', numbers.n), ' ', -1) tag
FROM
  numbers 
INNER JOIN t1
  ON CHAR_LENGTH(t1.tags)
     -CHAR_LENGTH(REPLACE(t1.tags, ' ', ''))>=numbers.n-1