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

如何用纯SQL将相同ID的所有结果高效存入数组,避免循环查询?

同ID分组聚合SQL实现方案

核心思路是使用SQL原生的分组聚合函数一次性完成数据聚合与插入,仅需扫描原表一次,无多余子查询开销,性能远高于循环逐次查询的方案。

不同数据库实现代码

MySQL

INSERT INTO new_table(ad_id, _duplicate_id)
SELECT 
  ad_id,
  CONCAT('{', GROUP_CONCAT(duplicate_id SEPARATOR ', '), '}') AS _duplicate_id
FROM 你的原表名
GROUP BY ad_id;

如果需要存储为JSON数组格式,可将GROUP_CONCAT部分替换为JSON_ARRAYAGG(duplicate_id)

PostgreSQL

INSERT INTO new_table(ad_id, _duplicate_id)
SELECT 
  ad_id,
  '{' || STRING_AGG(duplicate_id::TEXT, ', ') || '}' AS _duplicate_id
FROM 你的原表名
GROUP BY ad_id;

如果需要存储为数组类型,可将拼接部分替换为ARRAY_AGG(duplicate_id)

Oracle

INSERT INTO new_table(ad_id, _duplicate_id)
SELECT 
  ad_id,
  '{' || LISTAGG(duplicate_id, ', ') WITHIN GROUP (ORDER BY duplicate_id) || '}' AS _duplicate_id
FROM 你的原表名
GROUP BY ad_id;

注意事项

  • 替换代码中的你的原表名为实际业务表名
  • 若duplicate_id为数值类型,部分数据库需要显式转为字符串后再进行拼接操作
  • 数据量越大,该方案对比循环方案的性能优势越明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:39:04