Cosmos DB的所有文档,看起来它只支持JOIN
关键字,这似乎是一种INNER JOIN
。
我有以下查询:
SELECT * FROM
(
SELECT
DISTINCT(c.id),
c.OtherCollection,
FROM c
JOIN s IN c.OtherCollection
)
AS c order by c.id
这可以正常工作,并返回填充了OtherCollection
的文档的数据。但它显然不会返回任何没有填充它的文档。
连接的原因是,有时我执行以下查询(查询是根据用户输入构建的)
SELECT * FROM
(
SELECT
DISTINCT(c.id),
c.OtherCollection,
FROM c
JOIN s IN c.OtherCollection
WHERE s.PropertyName = 'SomeValue'
)
AS c order by c.id
问题是,在这种情况下,我如何才能拥有一种LEFT JOIN
运算符?
2条答案
按热度按时间svgewumm1#
请记住,CosmosDB中的联接发生在单个项中。具体来说,联接的作用域是该项,不能跨多个项和容器进行。
在某些情况下,对象或子对象为null或不存在,则可以使用检查函数(EXISTS或IS_NULL)ANDEXISTS表达式模拟LEFT JOIN。
甚至,更好的做法是使用EXISTS表达式来JOIN。
例如:
qij5mzcb2#
CosmosDB**
JOIN
**操作仅限于单个文档的范围。什么是可能的是你可以加入父对象与子对象在同一个文件。它与SQL连接查询完全不同,SQL连接查询支持跨两个/多个表。