嵌套 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 }),
  );