我试图在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'
答案 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);
})