MySQL中如何从JSON类型字段提取所有name与value值?
解决MySQL JSON字段提取属性的问题
你的attributes字段是嵌套JSON结构,根节点以UUID作为键,name和value都嵌套在这些子对象里,所以直接用attributes->'$.name'会返回NULL——因为根节点根本没有name这个键。
需求1:提取所有唯一的name值
使用JSON_TABLE(MySQL 8.0及以上版本支持)将JSON对象展开为行记录,再通过DISTINCT去重:
SELECT DISTINCT jt.name FROM products, JSON_TABLE( JSON_QUERY(attributes, '$'), '$.*' COLUMNS( name VARCHAR(255) PATH '$.name' ) ) AS jt;
需求2:提取所有的name和value值
同样用JSON_TABLE展开结构,同时提取name和value:
SELECT products.id, -- 可带上商品主键关联到具体商品 jt.name, jt.value FROM products, JSON_TABLE( JSON_QUERY(attributes, '$'), '$.*' COLUMNS( name VARCHAR(255) PATH '$.name', value VARCHAR(255) PATH '$.value' ) ) AS jt;
如果不需要关联商品信息,简化为:
SELECT jt.name, jt.value FROM products, JSON_TABLE( JSON_QUERY(attributes, '$'), '$.*' COLUMNS( name VARCHAR(255) PATH '$.name', value VARCHAR(255) PATH '$.value' ) ) AS jt;
内容的提问来源于stack exchange,提问作者user367970
相关产品推荐
相关产品推荐

