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

MariaDB中如何用JSON_EXTRACT筛选office=1的groupid?

解决MariaDB中筛选JSON数组指定条件的groupid问题

嘿,我来帮你搞定这个JSON数据查询的问题!你的需求是从嵌套的JSON数组里挑出office="1"的groupid,用JSON_TABLE来处理是最清晰高效的方式——它能把JSON数组转换成关系型表结构,让筛选和提取变得跟普通SQL一样简单。

假设你的表名叫your_table,存储JSON数据的字段是json_column,直接用下面的查询语句就能得到你要的结果:

SELECT jt.groupid
FROM your_table,
     JSON_TABLE(
         -- 提取出JSON中的groups数组
         json_column->>'$.groups',
         -- 遍历数组里的每一个元素
         '$[*]' COLUMNS (
             -- 提取每个元素的groupid字段
             groupid VARCHAR(20) PATH '$.groupid',
             -- 提取每个元素的office字段,用于后续筛选
             office VARCHAR(1) PATH '$.office'
         )
     ) AS jt
-- 筛选出office值为"1"的记录
WHERE jt.office = '1';

各部分作用简单说明:

  • json_column->>'$.groups':这是MariaDB简化的JSON提取语法,等价于JSON_UNQUOTE(JSON_EXTRACT(json_column, '$.groups')),用来获取JSON里的groups数组,同时自动去掉多余的引号。
  • JSON_TABLE:核心处理函数,把JSON数组拆成一行行的关系型数据,我们在这里定义了要提取的groupid和office两个字段,对应JSON元素里的同名属性。
  • WHERE jt.office = '1':像筛选普通表字段一样,直接过滤出office值为"1"的记录,最终只返回对应的groupid。

额外注意点:

如果你的JSON里office存储的是数字类型(比如1而不是"1"),只需要把WHERE条件改成jt.office = 1即可,不用加引号。

要是你不想用JSON_TABLE,也可以用JSON_SEARCH结合提取函数实现,但写法会绕很多,还是上面的方法更直观好维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:57:07