如何在Knex中编写mysql子查询?

时间:2019-04-15 10:41:29

标签: mysql subquery knex.js koa

我试图在knex中编写mysql子查询sql,但是查询结果是不希望的。

这是我的MySQL查询:

    select *
    from istifta
    where istifta_id not in (
    select istifta_id
    from status
    where status = 'divided'
    )

这是我的查询转换为Knex:

    subquery = await ctx.knex
      .select('istifta_id')
      .from('status')
      .where('status', 'divided')

    result = await ctx.knex
    .select()
    .from('istifta')
    .where('istifta_id', 'not in', subquery)

MySQL查询返回两行都没有status = 'divided'的行 当Knex返回三行时,其中一行包含status = 'divided'

1 个答案:

答案 0 :(得分:0)

您可以将.whereNotIn与function()定义选项一起使用来嵌套子查询。您的子查询位于function()中,为:

 select('istifta_id').from('status').where('status', 'divided')

.on函数使调试更加容易。

result = await ctx.knex.from('istifta')
    .whereNotIn( 'istifta_id', function() {
        this.select('istifta_id').from('status').where('status', 'divided')
    })
    .on('query', function(data) { 
        console.log("TEST001 data:", data); })
    .on('query-error', function(ex, obj) {
        console.error("TEST002 KNEX query-error ex:", ex, "obj:", obj);
    })