【问题标题】:Selecting a sum() from a secondary table and joining with a first select从辅助表中选择 sum() 并使用第一个选择加入
【发布时间】:2019-01-17 19:09:16
【问题描述】:

我正在使用 knex.js 库从名为“empresas”的第一个表中选择数据,并尝试从名为“sucursales”的第二个表中获取 sum('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 left-join


    【解决方案1】:

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

    这个:

    knex.select('*')
    

    应该写成:

    knex.select('empresas.id')
    

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

    【讨论】:

    • 我尝试使用 knex('empresas.id','empresas.rut','empresas.razon_social','empresas.email') ,但我仍然只得到 id 在两者上的行表格
    • @IngolfKrauss :我认为您也需要更改 GROUP BY,我更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多