mysql - SQL Join 与代码聚合
问题描述
我正在尝试开发从我的关系数据库(mysql)中检索聚合信息的最佳方法。我有两个表:供应商和模型。两者之间是一对多的关系,即一个厂商可以有多个模型,一个模型只能与一个厂商关联。
从两个表中检索信息以使每个供应商都有其关联模型的最佳方法是什么?我的想法是制作一个 REST API,以便它可以具有以下输出:
{
name: "one",
description: "one description",
models: [
{
name: "one_model_1",
price: 100
},
{
name: "one_model_2",
price: 200
}
]
...
通过在两个表之间进行连接来检索。这样,将获得以下输出:
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;
问题是必须执行代码处理以将每个供应商元素与模型列表相关联。在这种情况下,来自数据库的信息会带来来自供应商的重复信息。
首先搜索所有供应商,然后循环它们以检索相关模型。这里将提出 N + 1 的问题,因为需要一个查询来获取 N 个供应商,然后再通过 N 个查询来检索模型。
首先搜索供应商。然后,从供应商的 id 中检索所有模型,并通过代码建立供应商-模型关联。
我想知道什么是最好的解决方案。
解决方案
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
一次调用,文本操作在返回结果集之前完成。
推荐阅读
- python - 没有使用 web3py 获得待处理的交易
- spring-data-r2dbc - Spring数据扫描存储库两次?
- javascript - Log4net highlightjs 语言语法
- java - 具有相同开始值和结束值的最大和子数组
- flutter - 尝试获取目录时的 _casterror(空值检查运算符)
- javascript - ./node_modules/react-dom/cjs/react-dom.development.js:25058 中的函数 createFiberFromTypeAndProps 出错
- processing - 有没有办法通过 keyPressed 使移动变量停止处理
- python - @property 的优势假设我只需要获得价值
- angular - 以角度编辑选定的表格行
- go - 在 Go Maps 中封装“并发安全”