使用 SQL 使用另一个数组中的值查询数组的最有效方法是什么?

问题描述 投票:0回答:1

我正在尝试使用 SQL 查询从 Cosmos DB 中检索项目。我目前正在使用以下结构在 Cosmos DB 中存储项目...

{ “ID”:[ “123456789”, “987654321”, “121542535” ] }

然后,我需要从 Cosmos DB 中查询我的项目,并找到具有包含另一个 Id 数组中的任何值的数组的任何项目,如下所示。

requiredIds = [“123456789”,“4828927593”]

在 SQL 中执行此操作最有效的方法是什么?

我尝试过使用 ARRAY_CONTAINS 方法,但它只支持在数组中搜索奇异值。

这样的东西会很棒... SELECT * FROM c WHERE ARRAY_CONTAINS(c.IDs, requiredIds)

我知道我可以分离出 requiredIds 数组的值并使用 OR 条件或类似的条件,但我希望有更有效的方法。

提前致谢。

sql azure-cosmosdb cosmos
1个回答
0
投票

您可以使用以下查询:

SELECT *
FROM c
WHERE ARRAY_LENGTH(setIntersect(c.IDs, ['123456789', '4828927593'])) > 0

这个找到两个数组中都出现的id,然后检查结果数组的长度是否大于0;换句话说,两个数组中都至少出现一个id。

SELECT VALUE c
FROM c
JOIN i IN c.IDs
WHERE ARRAY_CONTAINS(['123456789', '4828927593'], i)

这会执行自连接并检查数组中是否出现任何

i
。它更具可读性,但如果每个文档有超过 1 个匹配项,它也会多次返回结果。如果您也知道 id 匹配后,可能会更好。还可能产生更好的性能(不确定查询 1 是否利用索引)。

© www.soinside.com 2019 - 2024. All rights reserved.