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

如何将TableB中关联key的列值合并到TableA的单列中?

合并TableB多行数据到TableA单列的SQL方案

你原来的SQL语句会报错,因为CONCAT()只能处理单个值,而嵌套的子查询会返回多行结果。需要使用对应数据库的字符串聚合函数,将TableB中同一keyA对应的多行col值合并为单个空格分隔的字符串,再更新到TableA中。以下是主流数据库的实现方案:

MySQL(5.7及以上版本)

使用GROUP_CONCAT函数,指定分隔符为空格:

UPDATE tableA a
SET column = (
    SELECT GROUP_CONCAT(b.col SEPARATOR ' ')
    FROM tableB b
    WHERE a.key = b.keyA
    GROUP BY b.keyA
);

SQL Server

2017及以上版本(支持STRING_AGG)

UPDATE a
SET a.column = b.concatenated_col
FROM tableA a
INNER JOIN (
    SELECT keyA, STRING_AGG(col, ' ') AS concatenated_col
    FROM tableB
    GROUP BY keyA
) b ON a.key = b.keyA;

旧版本SQL Server(无STRING_AGG)

用FOR XML PATH拼接字符串,再用STUFF去掉开头多余的空格:

UPDATE a
SET a.column = STUFF(
    (SELECT ' ' + col
     FROM tableB b
     WHERE b.keyA = a.key
     FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),
    1, 1, ''
)
FROM tableA a;

PostgreSQL

使用STRING_AGG函数:

UPDATE tableA a
SET column = (
    SELECT STRING_AGG(b.col, ' ')
    FROM tableB b
    WHERE a.key = b.keyA
    GROUP BY b.keyA
);

注意事项

  • 执行更新前务必备份TableA和TableB的数据,防止数据丢失或错误
  • 确认TableA的column字段长度足够,避免合并后的字符串被截断
  • 验证更新结果无误后,再执行DROP TABLE tableB;删除TableB

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:36:06