我有一个表字段存储的数据类似这样:
fashion scarf
mens plaid scarf
cashmere scarf for men
mens grey scarves
mens grey scarf我需要取出这个字段值的集合(无重复的单词),返回一个字符串,结果是:mens fashion plaid  grey scarves cashmere scarf for men(单词顺序无所谓)请问sql语句要怎么写呀?谢谢大家!!!

解决方案 »

  1.   

    -- 如果你的版本支持 JSON,可以用 JSON 处理,这样相对容易
    DROP TEMPORARY TABLE IF EXISTS t;
    CREATE TEMPORARY TABLE t(value varchar(500));
    INSERT INTO t VALUES
    ('fashion scarf'),
    ('mens plaid scarf'),
    ('cashmere scarf for men'),
    ('mens grey scarves'),
    ('mens grey scarf');
    --  合并关键字
    SELECT @x:=JSON_MERGE(@x, CONCAT('{"', REPLACE(value, ' ', '":1, "'), '":1}') )
    FROM t, (SELECT @x:='{}') x;-- 所有不重复的关键字(需要格式的话,做一下字符串替换)
    SELECT JSON_KEYS(@x);
      

  2.   

    不用json那么复杂,sql语句有查询去充关键字,你百度一下就知道了
      

  3.   

    select DISTINCT substring_index(substring_index(a.value,',',b.help_topic_id+1),',',-1) 
    from
    (select GROUP_CONCAT(REPLACE(value,' ',',')) value from t ) a
    join
    mysql.help_topic b
    on b.help_topic_id < (length(a.value) - length(replace(a.value,',',''))+1);
      

  4.   

    拆分不用先 GROUP_CONCAT的,毕竟长度未知,不 GROUP_CONCAT 都不好保证要拆分的个数在序号表的表示范围内
    GROUP_CONCAT 的话,就更不好保证了