【发布时间】:2019-12-17 12:34:19
【问题描述】:
我有一个具有数组属性的数据集。比如我select * from c:
[
{
"id": "1",
"props": []
},
{
"id": "2",
"props": ["a"]
},
{
"id": "3",
"props": ["b"]
}
]
我想运行此查询以按 props 列排序:
select * from c order by c.props
但是它返回 0 条记录,因为第一个数组项是空的(如果我删除订单,它可以正常工作并返回三个记录)。我可以这样做来尝试解决它:
select c.* as item, props = [] ? '' : props[0] as orderCol from c
返回所有三个项目(没有 order by)但是当我尝试像这样应用 order by 时:
select c.* as item, props = [] ? '' : props[0] as orderCol from c order by c.orderCol
返回 0 条记录。我究竟做错了什么? (我不想要 where 子句来过滤空的道具记录)。基本上,我无法按我的自定义选择字段 "orderCol" 进行排序。
注意:使用 order by c.id 可以正常工作!
提前感谢您的任何指点!
【问题讨论】:
-
数组属性是否只有一个项目?奇怪的是,为什么 order by 通常会导致 0 结果,这似乎是错误的,尽管按数组属性排序并不是我想说的常见或预期的事情,因为可能有多个项目。
-
真的想按第一个数组项默认排序 - 似乎根本不起作用
-
可能你得到了一个错误,而不仅仅是零结果?
-
尝试使用自定义字段时出错
-
不确定如何使用数组进行排序,因为数组可以包含可变数量的项目——这没有任何意义。至于缺失项:目前的索引只包括包含相关属性的文档;见我的回答here,与此相关。
标签: sql azure azure-cosmosdb