游戏服务器JSON库存字段提取重复数据集查询问题求助
解决JSON库存字段提取展开问题
问题根源
你的items字段应该是JSON数组格式(比如存储的是[{"name":"物品A","amount":2},{"name":"物品B","amount":5}]这类多元素数组),而非单个JSON对象。直接用json_extract取$.amount/$.name找不到对应路径,因此返回Null。
解决方案(MySQL 8.0+适用)
使用JSON_TABLE函数将JSON数组转换为关系型表格,展开每个物品的name和amount:
SELECT jt.name, jt.amount FROM trunkitems JOIN JSON_TABLE( trunkitems.items, '$[*]' COLUMNS( name VARCHAR(255) PATH '$.name', amount INT PATH '$.amount' ) ) AS jt WHERE trunkitems.plate = '6DV689SW';
$[*]表示遍历JSON数组中的每一个元素COLUMNS块定义要提取的字段、对应数据类型和JSON路径
其他数据库适配(以PostgreSQL为例)
如果使用PostgreSQL,可通过jsonb_array_elements展开数组:
SELECT (item->>'name') AS name, (item->>'amount')::INT AS amount FROM trunkitems, jsonb_array_elements(items::jsonb) AS item WHERE plate = '6DV689SW';
补充说明
你原SQL里的$."amount"可简化为$.amount,无需转义引号,但这不是返回Null的核心原因——核心是没有处理JSON数组的遍历展开逻辑。
内容的提问来源于stack exchange,提问作者Rigz Gx
相关产品推荐
相关产品推荐

