我该如何克服SQL查询超出了最大连接数。允许的限制为5个错误

时间:2019-09-11 04:34:35

标签: 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.MethodOfPreparation 
join customer in MethodOfPreparation.Customer 

但是,我遇到了以下错误

  

SQL查询超出了最大连接数。允许的限制为5

我该如何解决。请有人帮我吗?

3 个答案:

答案 0 :(得分:1)

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

创建视图[dbo]。[CustomerView] AS SELECT column1,column2,... FROM table_name 条件在哪里;

答案 1 :(得分:1)

在cosmos db SQL查询中不能使用这样的临时表。根据此official blog,该限制暂时不会增加。

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

当然,您可以提交反馈here来改进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中的sub属性(因为您的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);
   }
}

答案 2 :(得分:1)

否,如Microsoft文档中所述,您不能在单个查询中使用超过5个联接。请找到此链接以获取更多信息。 LINK enter image description here

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