嵌套 SELECT 和 NOT IN 如何在 knex 中工作
How does nested SELECT and NOT IN work in knex
我试图在 knex 中编写此查询,但卡住了。
我目前有 3 个表(group_tasks、completed_group_tasks 和 group_users)
我想过滤掉grouptask_id from completed_group_tasks和innerjoin一样的结果。
SELECT * FROM group_tasks INNER JOIN group_users ON group_users.group_id = group_tasks.group_id WHERE user_id = 2 AND grouptask_id NOT IN (SELECT grouptask_id FROM completed_group_tasks WHERE user_id = 2)
我试过这样写:
db.from('group_users')
.select('groups.group_id', 'group_name')
.innerJoin('groups', 'group_users.group_id', 'groups.group_id')
.where({user_id: user_id})
.whereNotIn('grouptask_id', function() {
this.from('completed_group_tasks')
.select('grouptask_id')
.where({user_id: user_id})
})
这说明 column "grouptask_id" does not exist
失败
Knex 中的子查询需要一个单独的 Knex 构建器。
db.from('group_users')
.select('groups.group_id', 'group_name')
.innerJoin('groups', 'group_users.group_id', 'groups.group_id')
.where({ user_id: user_id })
.whereNotIn(
'grouptask_id',
db
.from('completed_group_tasks')
.select('grouptask_id')
.where({ user_id: user_id }),
);
我试图在 knex 中编写此查询,但卡住了。 我目前有 3 个表(group_tasks、completed_group_tasks 和 group_users)
我想过滤掉grouptask_id from completed_group_tasks和innerjoin一样的结果。
SELECT * FROM group_tasks INNER JOIN group_users ON group_users.group_id = group_tasks.group_id WHERE user_id = 2 AND grouptask_id NOT IN (SELECT grouptask_id FROM completed_group_tasks WHERE user_id = 2)
我试过这样写:
db.from('group_users')
.select('groups.group_id', 'group_name')
.innerJoin('groups', 'group_users.group_id', 'groups.group_id')
.where({user_id: user_id})
.whereNotIn('grouptask_id', function() {
this.from('completed_group_tasks')
.select('grouptask_id')
.where({user_id: user_id})
})
这说明 column "grouptask_id" does not exist
Knex 中的子查询需要一个单独的 Knex 构建器。
db.from('group_users')
.select('groups.group_id', 'group_name')
.innerJoin('groups', 'group_users.group_id', 'groups.group_id')
.where({ user_id: user_id })
.whereNotIn(
'grouptask_id',
db
.from('completed_group_tasks')
.select('grouptask_id')
.where({ user_id: user_id }),
);