使用带有knex.js的leftjoin将条件仅应用于辅助表

时间:2019-01-21 20:32:47

标签: mysql count left-join where-clause knex.js

我正在使用knex.js库从表中选择所有行,并从辅助表中获取count()。以下代码可以正常工作:

package.json

此查询显示表empresas中的所有行,如果表procesos2中有行,则计数。

不,我想为条件 knex.schema.raw("SET sql_mode=''").then(() => { knex.select('empresas.id','empresas.rut','empresas.empresa','empresas.razon_social','procesos2.id','procesos2.id_empresas','procesos2.estado') .from('empresas') .leftJoin('procesos2', 'empresas.id', 'procesos2.id_empresas') .count('procesos2.id as total') .groupBy('empresas.id') 添加一个条件

如果我添加此where子句,我将获得正确的计数,但只显示一行,而不显示empresas的所有行。

如何添加条件以获取表empresas中所有行的计数。

1 个答案:

答案 0 :(得分:0)

可以在knex.js中使用on()将条件添加到join语句,并使用andOn()添加条件。

这正在工作

knex.schema.raw("SET sql_mode=''").then(() => {
    knex.select('empresas.id AS ide','empresas.rut','empresas.empresa','empresas.razon_social','procesos2.id','procesos2.id_empresas','procesos2.estado')
    .from('empresas')
    .leftJoin('procesos2', function() {
        this.on('procesos2.id_empresas ', '=', 'empresas.id')
            .andOn('procesos2.estado', '=', 0)
    })
    .count('procesos2.id as total')
    .groupBy('empresas.id')