我有一个json查询,它为我提供了一个包含个人和宠物的联接表的json:
SELECT json_object(
'personId', p.id,
'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;
我的问题是,一个人可以有0个或更多的宠物,当一个人有0个宠物我得到一个空宠物列表,我想在这种情况下是空名单。
这就是我得到的:
{
"personId": 1,
"pets": [
{
"petId": null,
"petName": ""
}
]
}
我需要:
{
"personId": 1,
"pets": []
}
有可能吗?
2条答案
按热度按时间nx7onnlm1#
另一种可能性是将聚合放在相关子查询中并使用
coalesce()
如果不存在行,则将其替换为空数组。ui7jx7zq2#
问题是
LEFT JOIN
仍然返回要加入的表中的列,它只是将它们的值设置为NULL
.你可以用
IF
测试COUNT(pt.id)
,因为这不会计算空值。