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

如何将关联表B的匹配值以JSON数组更新至表A的json_field?

正确的SQL更新方案

要实现将表B中与A.id匹配的value值以JSON数组形式更新到A表的json_field,需根据你使用的数据库类型选择对应语句,以下是主流数据库的实现方式:

MySQL/MariaDB

使用JSON_ARRAYAGG函数直接聚合生成JSON数组,推荐两种写法:

子查询方式

UPDATE A
SET json_field = (
    SELECT JSON_ARRAYAGG(value)
    FROM B
    WHERE B.a_id = A.id
);

JOIN分组方式

UPDATE A
JOIN (
    SELECT a_id, JSON_ARRAYAGG(value) AS values_json
    FROM B
    GROUP BY a_id
) AS B_agg ON A.id = B_agg.a_id
SET A.json_field = B_agg.values_json;

PostgreSQL

使用json_agg函数聚合生成JSON数组:

子查询方式

UPDATE A
SET json_field = (
    SELECT json_agg(value)
    FROM B
    WHERE B.a_id = A.id
);

JOIN分组方式

UPDATE A
SET json_field = B_agg.values_json
FROM (
    SELECT a_id, json_agg(value) AS values_json
    FROM B
    GROUP BY a_id
) AS B_agg
WHERE A.id = B_agg.a_id;

SQL Server

  • 若使用SQL Server 2022及以上版本,可直接用JSON_ARRAYAGG:
UPDATE A
SET json_field = (
    SELECT JSON_ARRAYAGG(value)
    FROM B
    WHERE B.a_id = A.id
);
  • 低版本可通过STRING_AGG拼接字符串后转JSON:
UPDATE A
SET json_field = JSON_QUERY('[' + STRING_AGG(CAST(value AS VARCHAR(MAX)), ',') + ']')
FROM A
JOIN B ON A.id = B.a_id
GROUP BY A.id;

原语句问题说明

你之前尝试的语句没有为每条A记录单独关联对应的B数据,而是查询了所有匹配的value,没有按a_id分组对应到具体的A记录,因此无法正确赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:45:08