DocumentDb:多个连接是否可以包含空集
DocumentDb: can multiple joins include empty sets
我在 DocumentDb 中有一个 'Message' 集合:
{
Subject: "Foo",
To: [
{ "Name": "Me", "Address": "me@company.com" }
],
Cc: [
{ "Name": "You", "Address": "you@company.com" }
]
}
和
{
Subject: "Bar",
To: [
{ "Name": "You", "Address": "you@company.com" }
],
Cc: []
}
我想select所有收件人或抄送地址为'you@company.com'的文件:
SELECT Message.Subject
FROM Message
JOIN To IN Message.To
JOIN Cc IN Message.Cc
WHERE "you@company.com" IN (To.Address, Cc.Address)
这是 returns 第一个文档,而不是第二个文档。
我认为 JOIN Cc in Message.Cc
导致第二个文档从结果中删除,因为它是空的。
有什么方法可以构建 SQL 查询以在结果集中包含第二个文档?
不,这需要两个查询(您可以使用 user-defined 函数将其写在一个查询中,但这种方法可能无法有效地使用索引)。
SELECT Message.Subject
FROM Message
JOIN To IN Message.To
WHERE To.Address = "you@company.com"
SELECT Message.Subject
FROM Message
JOIN To IN Message.Cc
WHERE Cc.Address = "you@company.com"
或者,如果名称和值都有值,您可以将其写为:
SELECT Message.Subject
FROM Message
WHERE ARRAY_CONTAINS(Message.To, { "Name": "You", "Address": "you@company.com" })
OR ARRAY_CONTAINS(Message.Cc, { "Name": "You", "Address": "you@company.com" })
如果您希望将此添加到 DocumentDB 的查询中,请 support/upvote 在 https://feedback.azure.com/forums/263030-documentdb/ 支持 sub-queries。
我在 DocumentDb 中有一个 'Message' 集合:
{
Subject: "Foo",
To: [
{ "Name": "Me", "Address": "me@company.com" }
],
Cc: [
{ "Name": "You", "Address": "you@company.com" }
]
}
和
{
Subject: "Bar",
To: [
{ "Name": "You", "Address": "you@company.com" }
],
Cc: []
}
我想select所有收件人或抄送地址为'you@company.com'的文件:
SELECT Message.Subject
FROM Message
JOIN To IN Message.To
JOIN Cc IN Message.Cc
WHERE "you@company.com" IN (To.Address, Cc.Address)
这是 returns 第一个文档,而不是第二个文档。
我认为 JOIN Cc in Message.Cc
导致第二个文档从结果中删除,因为它是空的。
有什么方法可以构建 SQL 查询以在结果集中包含第二个文档?
不,这需要两个查询(您可以使用 user-defined 函数将其写在一个查询中,但这种方法可能无法有效地使用索引)。
SELECT Message.Subject
FROM Message
JOIN To IN Message.To
WHERE To.Address = "you@company.com"
SELECT Message.Subject
FROM Message
JOIN To IN Message.Cc
WHERE Cc.Address = "you@company.com"
或者,如果名称和值都有值,您可以将其写为:
SELECT Message.Subject
FROM Message
WHERE ARRAY_CONTAINS(Message.To, { "Name": "You", "Address": "you@company.com" })
OR ARRAY_CONTAINS(Message.Cc, { "Name": "You", "Address": "you@company.com" })
如果您希望将此添加到 DocumentDB 的查询中,请 support/upvote 在 https://feedback.azure.com/forums/263030-documentdb/ 支持 sub-queries。