是否可以使用mysql脚本获取列表对象的数据?

是否可以使用mysql脚本获取列表对象的数据?,mysql,sql,arrays,json,join,Mysql,Sql,Arrays,Json,Join,有一个json查询,它为我提供了个人和宠物的连接表的json: SELECT json_object( 'personId', p.id, 'firstPetName', p.firstPetName, 'pets', json_arrayagg( json_object( 'petId', pt.id, 'petName',

有一个json查询,它为我提供了个人和宠物的连接表的json:

SELECT 
    json_object(
        'personId', p.id,
        'firstPetName', p.firstPetName,
        'pets', json_arrayagg(
                   json_object(
                   'petId', pt.id,
                   'petName', pt.name
                  )
                 )
                )
     FROM person p
     LEFT JOIN pets pt ON p.id = pt.person_id
     GROUP BY p.id;
我想添加一个条件,如果
p.firstPetName
为null或空字符串,则将第一只宠物的
pt.petName
放入宠物列表中,这可能吗

例如:

如果结果是这样的:

{
  "personId": 1,
  "firstPetName": null // or ""
  "pets": [
    {
      "petName": "walker"
    },
    {
      "petName": "roxi"
    }
  ]
}
我想得到:

{
  "personId": 1,
  "firstPetName": "walker"
  "pets": [
    {
      "petName": "walker"
    },
    {
      "petName": "roxi"
    }
  ]
}
如果有可能做一些类似于
pt[0].petName的事情,那真是太棒了

来自:

JSON\u ARRAYAGG(col\u或expr)[over\u子句]

将结果集聚合为单个JSON数组,其元素由行组成。此数组中元素的顺序未定义

因此,在您的用例中,列表中宠物的顺序没有定义。您无法确定哪个宠物将首先出现在
json_arrayagg
调用生成的json数组中

下面的查询给出了一个默认为具有最小名称的pet的答案。然后使用
COALESCE
函数为
p.firstPetName
提供默认值

SELECT 
    json_object(
        'personId', p.id,
        'firstPetName', COALESCE(p.firstPetName, MIN(pt.name))
        'pets', json_arrayagg(
            json_object(
                'petId', pt.id,
                'petName', pt.name
            )
        )
    )
FROM 
    person p
    LEFT JOIN pets pt ON p.id = pt.person_id
GROUP BY p.id;

由于查询中没有
orderby子句,我们如何确定宠物的第一个名字是什么?@DanielE。不,我不能指望…@GMB只是列表中的第一个宠物对象。@DanielE。只是列表中的第一个宠物对象。比如说,如果有可能执行类似于
pt[0].petName
的操作,那么good@jackmiao那它怎么会是列表中的第一项呢?以你的例子来说,我真的认为是id.Walker>Roxi,在知道顺序之前我们无法回答:/@DanielE/Walker.:但我们能得到它吗?。。。不管怎样,我想你是对的,让我暂时搁置我的答案…@DanielE。没有排序标准,我只需要列表中的第一个对象,head..@DanielE.:好吧,我想我们真的不知道订单,看看我的更新answer@GMB你说得对,谢谢你的详细回答。幸运的是,在我的特殊情况下,这也能起作用。谢谢