mysql合并两个varchar列删除重复的单词

标签 mysql sql merge

我有一个包含 2 个 varchar 列的表 - col_name1 和 col_name2 加上空的 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');

最佳答案

问题解答如下:

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

关于mysql合并两个varchar列删除重复的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50429292/

相关文章:

php - 嵌套 PHP while 循环在显示请求的结果之前返回先前的结果

php - 在 SQL 数据库中存储表单数据

linux - 如何使用合并命令将此文本文件中的 5 行与另一个文本文件中的 1 行合并?

sql-server - SSIS Merge Join 的结果

svn - 您如何确信 Subversion 的自动合并不会引入逻辑冲突?

mysql - JSF 应用程序创建过多数据库连接

java - 将远程 tomcat/mySQL 服务器带到本地主机 Mac

mysql - 更正我的 MySQL 查询吗?

如果有两种语言,MySQL 从表中选择一个值

mysql - Spark DataFrame InsertIntoJDBC - TableAlreadyExists 异常