从 MySQL 中的字符串数组中删除重复的单词

哔叽

我有 2 个 varchar 列的表 - col_name1 和 col_name2

(1, 'hello world', 'hello test'),
(2, 'the stack over', 'over the flow'),
(3, 'hello from my sql fiddle', 'hello my sql');

见 SQLFIDDLE http://sqlfiddle.com/#!9/cf90c1/1

我正在寻找一种方法来在两列中找到重复的单词并从 col_name1 中删除这样的单词。

这意味着在 Mysql 操作之后 + UPDATE + SET - col_name1 应该包含像下面这样的词

(1, 'world', 'hello test'),
(2, 'stack', 'over the flow'),
(3, 'from fiddle', 'hello my sql');
用户8406805

这是您的问题的解决方案:

解决您的问题语句的 SQL:

update table_name x3
join (
select id,replace(group_concat(w),',',' ') w from (SELECT id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.c, ' ', x.x), ' ', -1) w
FROM (SELECT id,concat(col_name1) c FROM table_name) t
INNER JOIN
(
    SELECT 1 + a.i + b.i * 10 x
    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.c) +1 - LENGTH(REPLACE(t.c, ' ', ''))) >= x.x
group by id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.c, ' ', x.x), ' ', -1)) x2
where not exists (select 1 from (SELECT id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.c, ' ', x.x), ' ', -1) w
FROM (SELECT id,concat(col_name2,' ',col_name1) c FROM table_name) t
INNER JOIN
(
    SELECT 1 + a.i + b.i * 10 x
    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.c) +1 - LENGTH(REPLACE(t.c, ' ', ''))) >= x.x
group by id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.c, ' ', x.x), ' ', -1) 
having count(1) > 1) x1 where x2.id = x1.id and x2.w = x1.w)
group by id
) x
on x3.id = x.id
set x3.col_name1 = x.w;

以下是从样本数据到预期输出的示例:

mysql> create table table_name(id int, col_name1 varchar(200),col_name2 varchar(200));
Query OK, 0 rows affected (0.36 sec)

mysql> insert into table_name values
    -> (1, 'hello world', 'hello test'),
    -> (2, 'the stack over', 'over the flow'),
    -> (3, 'hello from my sql fiddle', 'hello my sql');
Query OK, 3 rows affected (0.11 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> update table_name x3
    -> join (
    -> select id,replace(group_concat(w),',',' ') w from (SELECT id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.c, ' ', x.x), ' ', -1) w
    -> FROM (SELECT id,concat(col_name1) c FROM table_name) t
    -> INNER JOIN
    -> (
    ->     SELECT 1 + a.i + b.i * 10 x
    ->     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.c) +1 - LENGTH(REPLACE(t.c, ' ', ''))) >= x.x
    -> group by id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.c, ' ', x.x), ' ', -1)) x2
    -> where not exists (select 1 from (SELECT id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.c, ' ', x.x), ' ', -1) w
    -> FROM (SELECT id,concat(col_name2,' ',col_name1) c FROM table_name) t
    -> INNER JOIN
    -> (
    ->     SELECT 1 + a.i + b.i * 10 x
    ->     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.c) +1 - LENGTH(REPLACE(t.c, ' ', ''))) >= x.x
    -> group by id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.c, ' ', x.x), ' ', -1) 
    -> having count(1) > 1) x1 where x2.id = x1.id and x2.w = x1.w)
    -> group by id
    -> ) x
    -> on x3.id = x.id
    -> set x3.col_name1 = x.w;
Query OK, 3 rows affected (0.13 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> select * from table_name;
+------+-------------+---------------+
| id   | col_name1   | col_name2     |
+------+-------------+---------------+
|    1 | world       | hello test    |
|    2 | stack       | over the flow |
|    3 | from fiddle | hello my sql  |
+------+-------------+---------------+
3 rows in set (0.00 sec)

希望,它会解决你的问题。祝一切顺利!!!

编辑 - 根据问题所有者的要求:处理大量单词。现在它将处理多达 10000 个单词

update table_name x3
join (
select id,replace(group_concat(w),',',' ') w from (SELECT id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.c, ' ', x.x), ' ', -1) w
FROM (SELECT id,concat(col_name1) c FROM table_name) t
INNER JOIN
(
    SELECT 1 + a.i + b.i * 10 x
    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
    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) c
    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) d 
) x
ON (LENGTH(t.c) +1 - LENGTH(REPLACE(t.c, ' ', ''))) >= x.x
group by id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.c, ' ', x.x), ' ', -1)) x2
where not exists (select 1 from (SELECT id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.c, ' ', x.x), ' ', -1) w
FROM (SELECT id,concat(col_name2,' ',col_name1) c FROM table_name) t
INNER JOIN
(
    SELECT 1 + a.i + b.i * 10 x
    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
    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) c
    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) d 
) x
ON (LENGTH(t.c) +1 - LENGTH(REPLACE(t.c, ' ', ''))) >= x.x
group by id,SUBSTRING_INDEX(SUBSTRING_INDEX(t.c, ' ', x.x), ' ', -1) 
having count(1) > 1) x1 where x2.id = x1.id and x2.w = x1.w)
group by id
) x
on x3.id = x.id
set x3.col_name1 = x.w;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

mysql语句删除字符串中重复的单词

来自分类Dev

删除mysql中重复的字符串

来自分类Dev

如何从mysql中的字符串中删除特定单词?

来自分类Dev

如何从mysql中的字符串中删除特定单词?

来自分类Dev

在mysql中删除字符串日期

来自分类Dev

从字符串数组中删除重复的单词

来自分类Dev

将mySQL与字符串中的任何单词匹配

来自分类Dev

mysql中的子字符串需要获取单词

来自分类Dev

从字符串中删除重复的单词

来自分类Dev

在MySQL中删除字符串的垃圾部分

来自分类Dev

MySQL SQL查询从记录中删除字符串

来自分类Dev

在MySQL中删除字符串后的所有内容

来自分类Dev

在mysql中的字符串中的字符之前选择两个单词

来自分类Dev

MySQL - 在表中存储字符串数组

来自分类Dev

在MySQL中匹配正则表达式中字符串中的单词的函数

来自分类Dev

在Mysql中搜索单词并从字符串(不是完整的字符串)中获取预测性搜索词

来自分类Dev

从C#中的字符串中删除重复的单词

来自分类Dev

在MySQL正则表达式中匹配字符串中的单词的函数

来自分类Dev

从字符串数组中仅删除一个重复单词的频率

来自分类Dev

如何在不使用数组的情况下删除字符串中的重复单词?

来自分类Dev

如何删除PHP字符串中的重复单词

来自分类Dev

删除字符串中重复的连续单词的最快算法?

来自分类Dev

从数组中包含的字符串中删除单词

来自分类Dev

如何使用mysql php选择与字符串中某些单词匹配的所有记录

来自分类Dev

从Java中的数组中删除重复字符串

来自分类Dev

替换从具有相同 MYSQL 的起始和结束字符的字符串中删除文本

来自分类Dev

无法匹配mysql中的字符串

来自分类Dev

MySQL中的增量字符串

来自分类Dev

Mysql WHERE列在字符串中

Related 相关文章

  1. 1

    mysql语句删除字符串中重复的单词

  2. 2

    删除mysql中重复的字符串

  3. 3

    如何从mysql中的字符串中删除特定单词?

  4. 4

    如何从mysql中的字符串中删除特定单词?

  5. 5

    在mysql中删除字符串日期

  6. 6

    从字符串数组中删除重复的单词

  7. 7

    将mySQL与字符串中的任何单词匹配

  8. 8

    mysql中的子字符串需要获取单词

  9. 9

    从字符串中删除重复的单词

  10. 10

    在MySQL中删除字符串的垃圾部分

  11. 11

    MySQL SQL查询从记录中删除字符串

  12. 12

    在MySQL中删除字符串后的所有内容

  13. 13

    在mysql中的字符串中的字符之前选择两个单词

  14. 14

    MySQL - 在表中存储字符串数组

  15. 15

    在MySQL中匹配正则表达式中字符串中的单词的函数

  16. 16

    在Mysql中搜索单词并从字符串(不是完整的字符串)中获取预测性搜索词

  17. 17

    从C#中的字符串中删除重复的单词

  18. 18

    在MySQL正则表达式中匹配字符串中的单词的函数

  19. 19

    从字符串数组中仅删除一个重复单词的频率

  20. 20

    如何在不使用数组的情况下删除字符串中的重复单词?

  21. 21

    如何删除PHP字符串中的重复单词

  22. 22

    删除字符串中重复的连续单词的最快算法?

  23. 23

    从数组中包含的字符串中删除单词

  24. 24

    如何使用mysql php选择与字符串中某些单词匹配的所有记录

  25. 25

    从Java中的数组中删除重复字符串

  26. 26

    替换从具有相同 MYSQL 的起始和结束字符的字符串中删除文本

  27. 27

    无法匹配mysql中的字符串

  28. 28

    MySQL中的增量字符串

  29. 29

    Mysql WHERE列在字符串中

热门标签

归档