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
相关产品推荐
相关产品推荐

