如何在Cosmos DB SQL中查询同primarycode异code2记录的共同requiredvalue
获取Cosmos DB中同一PrimaryCode下不同Code2记录的共同RequiredValue
要找出同一primarycode下不同code2的文档中,所有文档都包含的requiredvalue,核心是找到这些文档的array.requiredvalue的交集。你现有的查询只能拿到所有去重后的value,我们可以通过统计每个值的覆盖范围来筛选出共同值。
实现思路
- 先统计符合条件的文档总数:同一
primarycode下不同code2的文档数量(你的示例里是2)。 - 统计每个
requiredvalue被多少个不同code2的文档包含。 - 筛选出统计数等于总文档数的
requiredvalue——这个值就是所有目标文档共同拥有的。
最终查询语句
SELECT r.requiredvalue FROM ( -- 统计每个requiredvalue对应的不同code2文档数 SELECT f.requiredvalue, COUNT(DISTINCT c.code2) AS code2Count FROM c JOIN f IN c.array WHERE c.primarycode = "0000001" GROUP BY f.requiredvalue ) r JOIN ( -- 获取符合条件的不同code2文档总数 SELECT VALUE COUNT(DISTINCT c.code2) FROM c WHERE c.primarycode = "0000001" ) totalDocs WHERE r.code2Count = totalDocs
逻辑解释
- 内层第一个子查询:通过
JOIN展开每个文档的array数组,按requiredvalue分组后,统计每个值对应的不同code2数量(确保同一个code2的文档重复出现也只计一次)。 - 内层第二个子查询:计算当前
primarycode下有多少个不同的code2文档,也就是我们需要覆盖的文档总数。 - 外层查询:关联两个子查询的结果,筛选出
code2Count等于总文档数的requiredvalue,这就是所有目标文档共同包含的值。
用你的示例数据测试,这个查询会返回"79050040002010",正好是两个文档都有的共同值。
内容的提问来源于stack exchange,提问作者Ritik Patel
相关产品推荐
相关产品推荐

