You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL合并两个VARCHAR列并删除重复词的实现方法

解决方案:合并两列并移除重复出现的单词

根据你的需求,我们需要把col_name1和col_name2中的单词合并到col_name3,但只保留那些只在其中一列出现的单词(也就是去掉在两列都重复的单词)。下面是针对MySQL的具体实现方案:

1. 确认表结构和测试数据

假设你的表名为your_table,先创建并插入你提供的测试数据:

CREATE TABLE your_table (
    id INT,
    col_name1 VARCHAR(255),
    col_name2 VARCHAR(255),
    col_name3 VARCHAR(255)
);

INSERT INTO your_table VALUES
(1, 'hello world', 'hello test', ''),
(2, 'hello from my sql fiddle', 'hello my sql', '');

2. 执行更新语句

使用以下SQL更新col_name3,实现合并去重的需求:

UPDATE your_table t
SET col_name3 = (
    SELECT GROUP_CONCAT(DISTINCT word SEPARATOR ' ')
    FROM (
        -- 拆分col_name1的所有单词
        SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.col_name1, ' ', n.n), ' ', -1) AS word
        FROM (
            SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL
            SELECT 6 UNION ALL SELECT 7 -- 如果单词数量更多,可继续添加数字
        ) n
        WHERE n.n <= LENGTH(t.col_name1) - LENGTH(REPLACE(t.col_name1, ' ', '')) + 1
        
        UNION ALL
        
        -- 拆分col_name2的所有单词
        SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.col_name2, ' ', n.n), ' ', -1) AS word
        FROM (
            SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL
            SELECT 6 UNION ALL SELECT 7
        ) n
        WHERE n.n <= LENGTH(t.col_name2) - LENGTH(REPLACE(t.col_name2, ' ', '')) + 1
    ) AS combined_words
    GROUP BY word
    HAVING COUNT(*) = 1 -- 只保留仅在一列出现的单词
);

3. 验证结果

执行完更新后,查询表数据:

SELECT * FROM your_table;

会得到你期望的结果:

+----+----------------------------+--------------------+--------------+
| id | col_name1                  | col_name2          | col_name3    |
+----+----------------------------+--------------------+--------------+
|  1 | hello world                | hello test         | world test   |
|  2 | hello from my sql fiddle   | hello my sql       | from fiddle  |
+----+----------------------------+--------------------+--------------+

补充说明

  • 数字表部分:我们用UNION ALL生成了1到7的数字,用来拆分字符串中的单词。如果字段中单词数量超过7个,只需要继续添加SELECT 8 UNION ALL SELECT 9...即可覆盖更多单词。
  • 核心逻辑:先把两列的单词拆分成单独的行,统计每个单词在当前行的出现次数,筛选出仅出现一次的单词,最后用GROUP_CONCAT合并成空格分隔的字符串。

内容的提问来源于stack exchange,提问作者Serge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:04:31