Orm 使用NOT IN子句和嵌套SELECT对查询进行续集

Orm 使用NOT IN子句和嵌套SELECT对查询进行续集,orm,sequelize.js,Orm,Sequelize.js,我有一个SQL查询,我想用sequelize查询语法来表示 DB方案 用户:(id,用户名,…) 组:(id,名称,…) 用户组:(id,#组id,#用户id) 查询描述 检索尚未属于特定组的所有用户 原始SQL查询(工作) 我被阻止的地方 我试图使用sequelizeinclude语句模拟连接,但我的大脑无法转换嵌套的SELECT查询以及NOT IN操作符…而不是在where子句中使用sequelize.literal,如下所示: const users = await database.

我有一个SQL查询,我想用sequelize查询语法来表示

DB方案

  • 用户:(id,用户名,…)
  • 组:(id,名称,…)
  • 用户组:(id,#组id,#用户id)
查询描述

检索尚未属于特定组的所有用户

原始SQL查询(工作)

我被阻止的地方

我试图使用sequelize
include
语句模拟连接,但我的大脑无法转换嵌套的SELECT查询以及
NOT IN
操作符…

而不是在
where
子句中使用sequelize.literal,如下所示:

const users = await database.User.findAll({
  where: Sequelize.where(Sequelize.literal(`(User.id NOT IN (
    SELECT User_Group.userId FROM User_Groups as User_Group 
    WHERE User_Group.groupId = '${groupId}'
  ))`)
}

或者您可以将Op.notInSequelize.literal

混合使用,非常感谢您指出
Sequelize.literal
选项。它为我指明了正确的方向,最后指出了sequelize中子查询的局限性。。。
const users = await database.User.findAll({
  where: Sequelize.where(Sequelize.literal(`(User.id NOT IN (
    SELECT User_Group.userId FROM User_Groups as User_Group 
    WHERE User_Group.groupId = '${groupId}'
  ))`)
}