【发布时间】:2019-11-16 03:31:30
【问题描述】:
给定用户表和评分表
如何从 Users 表中查询所有在 Ratings 表中没有评分记录的用户记录使用 Sequelize 包含子句
注意:续集版本 5.x
提前致谢
【问题讨论】:
标签: mysql orm sequelize.js
给定用户表和评分表
如何从 Users 表中查询所有在 Ratings 表中没有评分记录的用户记录使用 Sequelize 包含子句
注意:续集版本 5.x
提前致谢
【问题讨论】:
标签: mysql orm sequelize.js
您可以通过两种方式执行此操作,具体取决于您的模型是如何定义的。
1. 使用Sequelize Eager Loading 获取所有Users 和Ratings。然后过滤用户没有任何评分的地方。
const users = Users.findAll({
include: [Ratings]
});
const filteredUsers = users.filter(user => user.ratings.length === 0);
2. 从Ratings 表中获取所有userIds,然后使用notIn Sequelize operator 将这些userIds 传递给where 子句
const ratings = Ratings.findAll({
attributes: ["userId"],
group: ["userId"]
});
const userIds = ratings.map(rating => rating.userId);
const filteredUsers = Users.findAll({
where: {
userId: { [Op.notIn]: userIds }
}
});
【讨论】:
尝试在 where 子句中加入 sequelize 文字:
const ratings = Ratings.findAll({
attributes: ["userId"],
group: ["userId"],
where: {
$and: [
sequelize.literal(`NOT EXISTS (
SELECT 1 FROM Ratings r
WHERE r.userId = User.id
)`),
],
},
});
【讨论】: