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

如何用SQL移除存储JSON字符串数组的列中匹配指定name的条目?

需求与实现方案

表结构与数据

TableX(colX为nvarchar类型,存储逗号分隔的JSON字符串)

id           colX 
123          { "name": "abc", "type": "solid"}, { "name": "xyz", "type": "liquid"}
456          { "name": "xyz", "type": "liquid"}

TableY

id           colY
123          abc
456          xyz

需求

编写SQL查询,移除TableX.colX中与对应id的TableY.colY匹配name属性的JSON条目,预期输出:

id         Col
123        { "name": "xyz", "type": "liquid"}
456         NULL

推荐实现方法

你的思路完全可行,以下是具体落地步骤(以SQL Server为例):

  • 拆分JSON条目为多行:先把TableX里的逗号分隔JSON字符串转成标准JSON数组,再用OPENJSON拆分成单条JSON行
  • 关联过滤保留条目:通过id关联TableY,筛选出name不匹配的JSON条目
  • 聚合生成结果:把保留的单条JSON重新拼接成字符串,无保留条目则返回NULL

完整SQL代码

WITH SplitJson AS (
    SELECT 
        tx.id,
        JSON_QUERY(value) AS json_item
    FROM TableX tx
    CROSS APPLY OPENJSON('[' + REPLACE(tx.colX, '}, {', '},{') + ']')
    JOIN TableY ty ON tx.id = ty.id
    WHERE JSON_VALUE(value, '$.name') <> ty.colY
)
SELECT 
    id,
    CASE 
        WHEN COUNT(json_item) = 0 THEN NULL
        ELSE STRING_AGG(json_item, ', ') 
    END AS Col
FROM SplitJson
GROUP BY id;

代码说明

  • REPLACE(tx.colX, '}, {', '},{'):修正原字符串格式,确保能转成OPENJSON可解析的标准JSON数组
  • JSON_QUERY:保留JSON对象的原始格式,避免被自动转义
  • STRING_AGG:将筛选后的单条JSON重新拼接成逗号分隔的字符串(SQL Server 2017及以上版本支持)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:30:07