【问题标题】:Use ARRAY_CONTAINS with a select statement将 ARRAY_CONTAINS 与 select 语句一起使用
【发布时间】:2022-09-15 15:29:22
【问题描述】:

我有一个查询,它几乎返回了我需要的数据:

SELECT *
FROM a in c.Things
WHERE ARRAY_CONTAINS([\'ThingA\', \'ThingB\'], a.Name)

问题是数组[\'ThingA\', \'ThingB\'] 不能被硬编码,因为数组中的值应该根据一些查询动态生成。对于此示例,该查询是这样的:

select VALUE ARRAY (
  SELECT VALUE a.Name
  FROM a in c.Things
  where a.Visible)
from c
WHERE c.Discriminator=\'Type\'

返回类似:[\'ThingOne\', \'ThingTwo\']

是否可以像这样在 ARRAY_CONTAINS 中包含查询:

SELECT *
FROM a in c.Attributes
WHERE ARRAY_CONTAINS(
  ( select VALUE ARRAY(
    SELECT VALUE a.Name
    FROM a in c.Things
    where a.Visible)
  from c
  WHERE c.Discriminator=\'Type\'
  )
  , a.Name)

如果我在 Cosmos DB Studio 中运行它,我会收到以下错误:

Microsoft.Azure.Cosmos.Query.Core.Exceptions.ExpectedQueryPartitionProviderException: {\"errors\":[{\"severity\":\"Error\",\"location\":{\"start\":147, \"end\":148},\"code\":\"SC2001\",\"message\":\"无法解析标识符\'c\'。\"}

    标签: azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    如果我理解正确,您的内部查询独立于外部查询,所以您想要的是不相关子查询. Cosmos DB 不支持此功能; documentation 说:

    Azure Cosmos DB 仅支持相关子查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 2020-11-14
      • 2011-02-08
      • 2014-11-24
      • 2023-03-05
      相关资源
      最近更新 更多