SQL连接与代码聚合

时间:2019-05-06 19:00:59

标签: mysql sql foreign-keys inner-join query-performance

我正在尝试开发从我的关系数据库(mysql)中检索聚合信息的最佳方法。我有两个表:供应商和模型。两者之间的关系是一对多的,即一个供应商可以有多个模型,而一个模型只能与一个供应商关联。

从两个表中检索信息的最佳方法是什么,以便每个供应商都有其关联的模型?我的想法是制作一个REST API,以便它可以具有以下输出:

{
    name: "one",
    description: "one description",
    models: [
        {
            name: "one_model_1",
            price: 100
        },
        {
            name: "one_model_2",
            price: 200
        }
    ]
    ...
  1. 通过在两个表之间进行联接来检索。这样,将获得以下输出:

    select v.name as vendorName, v.description as vendorDescription, m.name 
    as modelName, m.price as modelPrice from vendor v inner join model m on 
    v.id = m.vendor_id;
    

    1

    问题在于,有必要执行代码处理以将每个供应商元素与模型列表相关联。在这种情况下,来自数据库的信息将带来来自供应商的重复信息。

  2. 首先对所有供应商进行搜索,然后循环搜索它们以检索关联的模型。这里将提出问题N +1,因为必须先进行查询才能获得N个供应商,然后需要进行N次查询才能检索模型。

  3. 首先对供应商进行搜索。然后,从供应商的ID中检索所有模型,并通过代码建立供应商与模型的关联。

我想知道什么是最好的解决方案。

2 个答案:

答案 0 :(得分:1)

SELECT v.Name, v.Description,
       GROUP_CONCAT(CONCAT(m.Name, ':', m.Price))
    FROM Vendors AS v
    JOIN Models AS m ON v.id = m.vendor_id
    GROUP BY v.Name, v.Description

一次调用,将在返回结果集之前完成文本操作。

答案 1 :(得分:0)

选项1是您列出的最有效的选项。所需的数据库调用次数最少(应用程序和数据库之间的往返次数最少)。