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

如何用UPDATE语句为现有表更新聚合拼接列?

正确实现按record_no聚合更新Concatenated_IP列

你的错误出在子查询未关联目标表与源表的record_no:直接分组updated_ip_dataset会返回所有record_no的聚合结果,无法匹配ip_tiebreaker_ref_table的单行数据,因此触发“子查询返回多个值”的报错。

以下两种写法可解决问题:

方法1:关联子查询

通过WHERE条件将子查询与外层更新表的record_no绑定,确保每次仅返回当前行对应的聚合结果:

UPDATE [dm_na_fin_da].[ip_tiebreaker_ref_table]
SET Concatenated_IP = (
    SELECT STRING_AGG(final_ip_description, ' | ')
    FROM [dm_na_fin_da].[updated_ip_dataset]
    WHERE updated_ip_dataset.record_no = ip_tiebreaker_ref_table.record_no
)
  • 若目标表中存在源表没有的record_no,对应行的Concatenated_IP会被设为NULL。

方法2:预聚合后关联更新

先对源表做聚合,再通过JOIN关联目标表更新,数据量较大时性能更优:

UPDATE t
SET t.Concatenated_IP = agg.Concat_IP
FROM [dm_na_fin_da].[ip_tiebreaker_ref_table] t
INNER JOIN (
    SELECT 
        record_no,
        STRING_AGG(final_ip_description, ' | ') AS Concat_IP
    FROM [dm_na_fin_da].[updated_ip_dataset]
    GROUP BY record_no
) agg ON t.record_no = agg.record_no
  • 仅更新源表中存在匹配record_no的行,不影响无匹配的行。

额外注意

确保Concatenated_IP的varchar(100)长度足够容纳拼接后的字符串,若经常出现超长内容,建议调整列长度(如varchar(255))避免截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:52:34