Azure 在子查询Select Cosmos DB中选择not,语法错误

Azure 在子查询Select Cosmos DB中选择not,语法错误,azure,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我最终会弄明白的,但我想把它说出来: 此查询: 选择不同的值e.siteid 从e到c 式中,e.传感器=‘空气温度’ 产生以下结果: [ "07000619231FBD", "07000619236CDB", "09000619236C01", "09000619236BE3", "0A000619236BD7"] 此查询正常工作,如预期: 挑选* 来自c 其中c.id不在[070006192

我最终会弄明白的,但我想把它说出来: 此查询:

选择不同的值e.siteid 从e到c 式中,e.传感器=‘空气温度’ 产生以下结果:

[ "07000619231FBD", "07000619236CDB", "09000619236C01", "09000619236BE3", "0A000619236BD7"]
此查询正常工作,如预期:

挑选* 来自c 其中c.id不在[07000619231FBD、07000619236CDB、09000619236C01、09000619236BE3、0A000619236BD7] 但组合(即子查询)会产生语法错误:

挑选* 来自c c.id不在哪 选择不同的值e.siteid 从e到c 式中,e.传感器=‘空气温度’
我在这里遗漏了什么?

您的第一个查询也给出了400个请求。我假设您复制错误,并且实际上没有在c.events中执行此操作,因为该查询中没有定义c

最有可能的问题是,您正在尝试使用跨文档联接进行查询?CosmosDB不支持联接不同的文档。只允许自联接。单独的查询会起作用,因为这样就消除了跨文档连接部分

见我的:

有两种主要类型的子查询:

关联:引用外部查询中的值的子查询。外部查询处理的每一行对子查询求值一次。 非相关:独立于外部查询的子查询。它可以独立运行,而不依赖外部查询。 注意:Azure Cosmos DB仅支持相关子查询

您最初的意图是单独的查询似乎是非相关的查询跨文档联接,但实际上您已经编写了一个相关的自联接。您可以做的是,正如您已经做的那样,只需连续进行最初的两个查询

如果您确实希望子查询仅检查来自同一文档自连接的空气温度,那么很可能您缺少了数组函数:

select *
from c
where c.id not in
 (ARRAY(SELECT distinct value e.siteid
  FROM e IN c.events
  where e.sensor = 'Air Temperature'))

谢谢你的回答!我发布的查询中没有一个得到我的坏请求,在emulator和azure中复制/粘贴,但这与问题无关。我错过了数组函数,谢谢