首页 > 解决方案 > 从辅助表中选择 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加入?

标签: mysqlleft-join

解决方案


您在要加入的两个表中都有同名的字段。您需要明确列出要选择的字段,否则 mysql 将选择任何重复的字段(在您的用例中,似乎选择了来自 sucursales 的 id,如果左连接不成功,则会产生 NULL )。

这个 :

knex.select('*')

应该写成:

knex.select('empresas.id')

GROUP BY 子句也应该与 empresas.id 而不是 sucursales.id 相关。


推荐阅读