mysql - 从辅助表中选择 sum() 并使用第一个选择加入
问题描述
我正在使用 knex.js 库从名为“empresas”的第一个表中选择数据,并尝试从名为“sucursales”的第二个表中获取总和('sucursales.dotacion as sum')。
到目前为止,我有这个工作代码使用 node.js 的 knex.js 库
knex.schema.raw("SET sql_mode=''").then(() => {
knex.select('*')
.from('empresas')
.leftJoin('sucursales', 'empresas.id', 'sucursales.id_empresas')
.sum('sucursales.dotacion as sum')
.groupBy('sucursales.id_empresas')
.then((rows) => {
for (row of rows) {
result += `${row['id']}` + ","
+ `${row['rut']}` + ","
+ `${row['empresa']}` + ","
+ `${row['razon_social']}` + ","
+ `${row['email']}` + ","
+ `${row['sum']}`
result += "<br/>";
}
res.send(JSON.stringify({ Sum : result}));
})
})
我的问题输出仅适用于两个表中的 id,我需要表“empresas”中的所有 id,当没有 sum() 时,只需将其设置为 NULL 或 0。
到目前为止,我尝试了内部联接、左右联接,但在完全外部联接时出现错误。
knex.select('empresas.id','empresas.rut','empresas.razon_social','empresas.email','sucursales.id_empresas','sucursales.dotacion')
我应该如何让mysql加入?
解决方案
您在要加入的两个表中都有同名的字段。您需要明确列出要选择的字段,否则 mysql 将选择任何重复的字段(在您的用例中,似乎选择了来自 sucursales 的 id,如果左连接不成功,则会产生 NULL )。
这个 :
knex.select('*')
应该写成:
knex.select('empresas.id')
GROUP BY 子句也应该与 empresas.id 而不是 sucursales.id 相关。
推荐阅读
- php - 使用 FPDF 库生成 PDF 的问题
- java - 如何使图像循环到屏幕的另一侧
- php - laravel 5.4 中会话超时时自动重定向到登录页面
- c++ - 如何强制编译器将“4 向量”包装类作为单个 XMM 寄存器传递?
- php - 在另一个函数中使用数组数据
- powershell - 使用powershell递归更改lastwritedate
- django - 如何为 SMTP 配置 Django 和 G Suite
- html - Flexbox 调整元素宽度以不留空白
- ios - swift parse json - 无法读取数据,因为它的格式不正确
- java - 正则表达式从路径获取带或不带扩展名的文件名