Mysql объединить два столбца varchar удалить повторяющиеся слова - PullRequest
0 голосов
/ 19 мая 2018

У меня есть таблица с 2 столбцами varchar - col_name1 и col_name2 PLUS, пустой varchar col_name3

(1, 'hello world', 'hello test', ''),
(2, 'hello from my sql fiddle', 'hello my sql', '');

См. SQLFIDDLE

Я ищу способ слияниядве колонки varchar в одну, но удалите повторяющиеся слова.Это означает, что новый col_name3 должен содержать только уникальные слова, как показано ниже

(1, 'hello world', 'hello test', 'world test'),
(2, 'hello from my sql fiddle', 'hello my sql', 'from fiddle');

1 Ответ

0 голосов
/ 20 мая 2018

Вот решение вопроса:

select id,group_concat(words) output
from(
SELECT id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.col, ' ', x.cifre), ' ', -1) AS words
,count(1)
FROM (SELECT id,concat(col_name1,' ',col_name2,' ',col_name3) as col FROM table_name) t
INNER JOIN
(
    SELECT 1 + a.i + b.i * 10  cifre, b.i + a.i * 10  sute
    FROM (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) a
    CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) b
) x
ON (LENGTH(t.col) +1 - LENGTH(REPLACE(t.col, ' ', ''))) >= x.cifre
group by id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.col, ' ', x.cifre), ' ', -1)
having count(1) =1) s
where length(words) > 0
group by id

Вывод:

id  output
1   test,world
2   fiddle,from

http://sqlfiddle.com/#!9/942f8/27

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...