Azure Cosmos DB SQL API如何实现LEFT JOIN以包含无地址人员
在Azure Cosmos DB SQL API中实现LEFT JOIN以包含无地址的联系人
先直接给你能满足需求的查询语句:
SELECT base.FirstName, base.LastName, Address.City FROM ContactPerson base LEFT JOIN Address IN (IS_DEFINED(base.Address) ? base.Address : [])
为什么原来的查询没达到效果?
你之前用的JOIN其实是内连接(INNER JOIN),它只会返回左右两边都有匹配数据的记录。也就是说,只有当ContactPerson文档存在Address数组时,才会生成对应的输出行,没有Address属性的文档直接被过滤掉了,这就是Jayanth的记录没出现在结果里的原因。
这个解决方案的逻辑是什么?
- 我们用
LEFT JOIN替代普通JOIN,它会保留左表(也就是ContactPerson集合里的所有文档),不管右表(Address数组)有没有匹配项。 - 用
IS_DEFINED(base.Address) ? base.Address : []做了一个兜底判断:如果文档存在Address属性,就用这个数组做连接;如果不存在,就用一个空数组来做连接。这样即使没有地址的文档,也会生成一条对应的空连接记录,最终保留该联系人的基本信息。
执行结果验证
运行上面的查询后,你会得到完全符合期望的输出:
[ { "FirstName": "Saravana", "LastName": "Kumar", "City": "aaaa" }, { "FirstName": "Saravana", "LastName": "Kumar", "City": "bbbb" }, { "FirstName": "Jayanth", "LastName": "T" } ]
内容的提问来源于stack exchange,提问作者Saravana Kumar
相关产品推荐
相关产品推荐

