#orm #sequelize.js
#orm #sequelize.js
Вопрос:
У меня есть SQL-запрос, который я хотел бы выразить, используя синтаксис запроса sequelize.
Схема БД
- Пользователи: (идентификатор, имя пользователя, …)
- Группы: (идентификатор, имя, …)
- Группы пользователей: (id, #groupId, #userId)
Описание запроса
Извлеките всех пользователей, которые еще не являются частью определенной группы.
Необработанный SQL-запрос (рабочий)
SELECT User.id, User.email FROM Users as User
WHERE User.id NOT IN (
SELECT User_Group.userId FROM User_Groups as User_Group
WHERE User_Group.groupId = ${groupId}
)
Где я заблокирован
Я попытался смоделировать соединение, используя оператор sequelize include
, но мой мозг застрял, преобразуя вложенный запрос SELECT, а также NOT IN
оператор…
Ответ №1:
Невозможно представить подзапросы, кроме использования Sequelize.literal в where
предложении, подобном этому:
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.notIn с Sequelize.literal
Комментарии:
1. Большое спасибо за указание
Sequelize.literal
опции. Это указало мне в правильном направлении и, наконец, на ограничение подзапросов в sequelize…