一尘不染

MySql从表中获取唯一单词的列表,其中字段中的值用逗号分隔

sql

我不确定使用纯SQL(MySQL)是否可以实现,但是无论如何我都会问。我有一个这样的表:

ID    TAGS
-----------------------------
1     word1,word2,word3
2     word2,word4
3     word3,word5,word6,word7
...

我想从标签字段中选择一个所有唯一的单词,以获得类似这样的内容:

TAGS
-----
word1
word2
word3
word4
word5
word6
word7

阅读 169

收藏
2021-03-10

共1个答案

一尘不染

您可以在SQL中执行此操作,尽管它不是很漂亮。

select distinct reverse(substring_index(reverse(substring_index(tags, ',', n.n)), ',', 1)) as word
from t cross join
     (select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n) n
having word is not null

您需要确保子查询的n每个标签中至少包含单词数。

是演示此的SQLFiddle。

这是将原始数据与序列号交叉连接。然后,使用从标签字符串中选择第n个值substring_index()

要获得最大数量的标签,您可以执行以下操作:

select max(length(tags) - length(replace(tags, ',', 1))+1
from t
2021-03-10