是否可以使用mysql脚本获取列表对象的数据?
有一个json查询,它为我提供了个人和宠物的连接表的json:是否可以使用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',
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你说得对,谢谢你的详细回答。幸运的是,在我的特殊情况下,这也能起作用。谢谢