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

多条件CASE表达式场景下,用表A数据更新表B Summary列的问题

解决表B的Summary列更新问题:按Id聚合拼接表A的去重Brand值

嘿,你遇到的问题其实是因为CASE表达式没法帮你做聚合拼接——它只会逐行匹配第一个满足条件的Brand,自然没法把同一个Id下的所有不同Brand都攒起来。你真正需要的是按Id分组,把表A里去重后的Brand拼接成逗号分隔的字符串,再更新到表B的summary列中。下面分几种主流数据库给你对应的解决方案:

1. MySQL/MariaDB

用GROUP_CONCAT函数实现去重拼接,先通过子查询处理好聚合结果,再关联表B完成更新:

UPDATE tableB b
JOIN (
    SELECT Id, GROUP_CONCAT(DISTINCT Brand ORDER BY Brand SEPARATOR ', ') AS brand_list
    FROM tableA
    GROUP BY Id
) a ON b.Id = a.Id
SET b.summary = a.brand_list;
  • DISTINCT确保同一个Brand不会重复出现在结果里
  • ORDER BY Brand可以让拼接后的字符串按品牌名称排序(可选)
  • SEPARATOR ', '指定分隔符,你也可以改成不带空格的,

2. SQL Server(2017及以上版本)

SQL Server 2017引入的STRING_AGG函数,支持直接去重和排序:

UPDATE b
SET b.summary = a.brand_list
FROM tableB b
JOIN (
    SELECT Id, STRING_AGG(DISTINCT Brand, ', ') WITHIN GROUP (ORDER BY Brand) AS brand_list
    FROM tableA
    GROUP BY Id
) a ON b.Id = a.Id;
  • WITHIN GROUP (ORDER BY Brand)用来控制拼接内容的顺序

3. PostgreSQL

PostgreSQL的STRING_AGG函数用法更灵活,直接支持DISTINCT和排序:

UPDATE tableB b
SET summary = a.brand_list
FROM (
    SELECT Id, STRING_AGG(DISTINCT Brand, ', ' ORDER BY Brand) AS brand_list
    FROM tableA
    GROUP BY Id
) a
WHERE b.Id = a.Id;

4. Oracle

Oracle用MERGE语句实现更新,LISTAGG是字符串聚合的核心函数:

Oracle 12c及以上(支持LISTAGG的DISTINCT)

MERGE INTO tableB b
USING (
    SELECT Id, LISTAGG(DISTINCT Brand, ', ') WITHIN GROUP (ORDER BY Brand) AS brand_list
    FROM tableA
    GROUP BY Id
) a ON (b.Id = a.Id)
WHEN MATCHED THEN UPDATE SET b.summary = a.brand_list;

Oracle 11g(不支持LISTAGG的DISTINCT,需先子查询去重)

MERGE INTO tableB b
USING (
    SELECT Id, LISTAGG(Brand, ', ') WITHIN GROUP (ORDER BY Brand) AS brand_list
    FROM (SELECT DISTINCT Id, Brand FROM tableA)
    GROUP BY Id
) a ON (b.Id = a.Id)
WHEN MATCHED THEN UPDATE SET b.summary = a.brand_list;

为什么你的CASE表达式不行?

你的CASE语句是逐行处理表A的数据,每次更新表B时只会取当前行匹配到的Brand值并覆盖之前内容,最终summary只会保留最后一次更新的单个Brand,而不是把所有符合条件的Brand聚合拼接起来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:39:01