Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySql obtém lista de palavras únicas da tabela onde os valores em um campo são separados por vírgula


Você pode fazer isso em SQL, embora não seja bonito.
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

Você precisa ter certeza de que a subconsulta n tem pelo menos o número de palavras em cada tag.

Aqui é o SQLFiddle que demonstra isso.

Esta é a junção cruzada dos dados originais com números sequenciais. Em seguida, ele escolhe o enésimo valor das strings das tags, usando substring_index() .

Para obter o número máximo de tags, você pode fazer:
select max(length(tags) - length(replace(tags, ',', 1))+1
from t