Azure cosmosdb 如何克服SQL查询超出最大联接数的问题。允许的限制为5个错误

Azure cosmosdb 如何克服SQL查询超出最大联接数的问题。允许的限制为5个错误,azure-cosmosdb,Azure Cosmosdb,我写了一个查询来获取客户,如下所示 SELECT customer FROM catalog join industry in catalog.Industy join category in industry.Category join Subcategory in category.Subcategory join product in Subcategory.Product join MethodOfPreparation in product.MethodOfPreparati

我写了一个查询来获取客户,如下所示

SELECT customer
FROM catalog join industry in catalog.Industy  
join category in industry.Category   
join Subcategory in category.Subcategory
join product in Subcategory.Product
join MethodOfPreparation in product.MethodOfPreparation 
join customer in MethodOfPreparation.Customer 
但是,我得到了以下错误

SQL查询超出了联接的最大数目。允许的限制是5

我怎样才能解决这个问题。有人能帮我吗?

尝试使用SQL视图 它将有助于连接更多的表以及返回更多的列

将视图[dbo].[CustomerView]创建为 选择第1列、第2列。。。 从表\u名称
何处条件

在cosmos db SQL查询中不能使用这样的临时表。根据这一点,这一限额暂时不会增加

我建议您拆分查询SQL或调整数据结构。毕竟,过多的连接时间也会降低查询效率

当然,您可以提交您的反馈以改进COSMOS DB的功能


例如,我的数据如下所示:

{
    "id": "1",
    "a": [
        {
            "b": [
                {
                    "c": [
                        {
                            "d": [
                                {
                                    "e": [
                                        {
                                            "f": [
                                                {
                                                    "g": "AAA"
                                                }
                                            ]
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}
我的SQL可以如下所示,以避免超过5次的连接:

SELECT e.f
FROM root r
join a in r.a  
join b in a.b   
join c in b.c
join d in c.d
join e in d.e 
如果要查询
e.f
中的子属性(因为SQL是
MethodOfPreparation.Customer
),可以在存储过程中循环结果以将项放入输出数组


更新:

如果最后要过滤
customer.id
,建议先用普通SQL查询客户数组:

SELECT MethodOfPreparation.customer
FROM catalog join industry in catalog.Industy  
join category in industry.Category   
join Subcategory in category.Subcategory
join product in Subcategory.Product
join MethodOfPreparation in product.MethodOfPreparation 
然后使用代码在cosmos db中的存储过程中循环数组:

var returnArray = [];
for(var i=0;i<feed.length;i++){

   var customer = feed[i];
   //to judge if id meets the filter condition
   if(id==???){
      returnArray.push(customer);
   }
}
var returnArray=[];

对于(var i=0;i否),您不能在一个查询中使用超过5个联接,如microsoft文档中所述。有关详细信息,请查找此链接。


现在,您可以通过将联接划分为子查询来优化联接。

也许您可以使用一个临时表来存储一些联接。您缺少了
join
语句的
ON
子句。也许这是问题所在,而不是
联接的数量。
如果没有得到,请给我一个示例在cosmos db中执行此查询,我可以使用临时表吗?如何拆分查询?请选择任何idea@iamthiru我的意思是,例如,您可以在存储过程中使用5 join查询sql,然后使用代码循环查询结果,以获取每个项目中的
customer
。@iamthiru是的,f是数组。然后不能使用sql,请使用代码返回loop结果并将每个f.id添加到输出数组中。这是我的想法。@iamthiru无论如何,我的话是你不能在一个查询中实现所有需要的内容。你可以使用sql plus代码组合最终结果。@iamthiru当然,有任何问题,请告诉我。