【发布时间】:2018-12-17 08:50:23
【问题描述】:
我的文档如下所示:
{
"id": "abc-123",
"firstName": "John",
"lastName": "Doe",
"emails": [
{
"id": "email-121",
"email": "j.doe@example.com",
"isPrimary": true
},
{
"id": "email-281",
"email": "testing@example.com",
"isPrimary": false
}
]
}
要记住的重要一点是,联系人记录可能没有电子邮件、一封电子邮件或多封电子邮件。
我有以下 SQL 查询来检索联系信息。如果emails 属性下至少有一封电子邮件,它可以正常工作,但如果没有电子邮件,则不返回任何内容。
我觉得这是一个非常简单的更改,但到目前为止我无法弄清楚,我希望能得到一些帮助。
SELECT c.id, c.firstName, c.lastName, e.email
FROM c JOIN e IN c.emails
WHERE c.id = "abc-123" AND e.isPrimary = true
我尝试了以下方法,但这给了我一个错误:
SELECT c.id, c.firstName, c.lastName, e.email
FROM c JOIN e IN c.emails
WHERE c.id = "abc-123" AND (e.isPrimary = true OR e.id = NULL)
我想要的是我应该始终获取联系人的 ID、名字和姓氏。如果有“主要”电子邮件,我也应该得到它,但如果联系人没有电子邮件,我仍然应该得到联系人的 id、名字和姓氏。
如果联系人在 emails 属性中没有任何电子邮件,我当前的 SQL 查询将不返回任何内容。因此,显然我需要修改我的查询以解决联系人根本没有电子邮件的情况。
我将不胜感激。
【问题讨论】:
-
从未听说过 Cosmos DB 中的
LEFT JOIN。对于 SQL 数据库,这不是T-SQL。你确定 Cosmos DB SQL API 支持LEFT JOIN? -
我很困惑:当没有任何电子邮件时,您希望获得什么结果?另外,我看到你发表了评论,但我不确定上下文,因为听起来你在问一个澄清问题(问某人“你确定”某事),但你也发布了原始问题。请编辑您的问题,使其更具体(并澄清您在评论中提出的问题)。
-
@DavidMakogon 更新了原始问题。我不是要求澄清。我正在尝试通过 Cosmos DB SQL API 获取联系人信息。目标是即使联系人没有电子邮件也能获取联系信息。如果有主电子邮件,我也应该得到它。对于我当前的 SQL 查询,如果联系人在
emails属性中根本没有电子邮件,则查询不会返回任何内容,甚至不会返回联系人的 ID、名字和姓氏。希望这能澄清我的问题。 -
@DavidMakogon 根据我的 cmets,有人建议我应该使用
LEFT JOIN,我只是在回复他。看起来他意识到这不是T-SQL并删除了他的 cmets。 -
好的。我试图从我的文档/联系人对象中只获取我需要的数据。如果存在,我可以提取整个内容并获取主要电子邮件。我总是试图准确地获得我需要的东西,以尽量减少在此过程中消耗的 RU,但很多时候,这比任何有形的好处都更令人头疼。当我比较 RU 时,我看不出阅读整个文档与阅读子集之间有很大区别。我想无论我在数据中保存什么,我都会在更复杂的查询中弥补差异。
标签: azure-cosmosdb