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

如何移除MariaDB查询结果的数组包裹?SQL语法报错求助

问题原因与解决方案

你使用的FOR JSON PATH, WITHOUT_ARRAY_WRAPPER是SQL Server特有的JSON格式化语法,MariaDB并不支持该语法,这就是触发SQL语法错误的原因。

针对MariaDB,提供以下几种实现“移除查询结果外层数组包裹”的方案:

方案1:明确单条结果时,直接构造单个JSON对象

如果你的查询(比如按主键id查询)肯定只会返回一条数据,用JSON_OBJECT手动构造单个JSON对象:

SELECT JSON_OBJECT(
    'id', id,
    'job_title', job_title,
    'description', description,
    -- 依次列出jobs表的所有字段,格式为'键名', 字段名
    'create_time', create_time
) AS job_detail
FROM jobs 
WHERE id = ?;

执行后会直接返回单个JSON对象,无外层数组包裹。

方案2:动态处理结果(兼容单/多条情况)

如果不确定查询结果数量,但想在单条结果时去掉数组包裹,可先将结果聚合为JSON数组,再提取第一个元素:

SELECT JSON_EXTRACT(
    JSON_ARRAYAGG(JSON_OBJECT(
        'id', id,
        'job_title', job_title,
        'description', description,
        'create_time', create_time
    )),
    '$[0]'
) AS job_detail
FROM jobs 
WHERE id = ?;
  • 若查询到1条数据:返回单个JSON对象
  • 若查询到多条数据:返回数组的第一个元素

方案3:应用层处理

如果你的业务代码(如Node.js、Java等)可以操作查询结果,也可以在拿到数据库返回的数组后,直接取数组的第一个元素(比如result[0]),同样能达到移除外层数组的效果,无需修改SQL语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:24:30