Sequelize - 如何从一个表中获取未被另一表关联的条目

Posted

技术标签:

【中文标题】Sequelize - 如何从一个表中获取未被另一表关联的条目【英文标题】:Sequelize - How to get entries from one table that are not assiciated by another table 【发布时间】:2019-02-11 12:34:58 【问题描述】:

我使用 Sequelize 为用户评分帖子定义了三个实体:

var User = sequelize.define('User', 
  email:  
    type: Sequelize.STRING,
    primaryKey: true
  
);

var Post = sequelize.define('Post', 
  link: 
    type: Sequelize.STRING,
    primaryKey: true
  
);

var Rating = sequelize.define('Rating', 
  result: Sequelize.STRING
);

Rating.belongsTo(Post);
Post.hasMany(Rating);

Rating.belongsTo(User);
User.hasMany(Rating);

用户可以对多个帖子进行评分。每个评分只属于一个用户和一个帖子。

现在我想查询给定用户所有尚未由该用户评分的帖子。我尝试了一千种方法,但没有成功。知道如何在 Sequelize 中实现这一点吗?非常感谢!

【问题讨论】:

【参考方案1】:

有两种方法在 Sequelize 中使用原始查询或通过 Sequelize 查询 -

原始 -

return Db.sequelize.query("SELECT * FROM Post P WHERE (P.id NOT IN (SELECT postId FROM Ratings R WHERE R.userId="+userId+")) ", type: Sequelize.QueryTypes.SELECT );

续集 -

return Post.findAll(
where: 
Sequelize.literal("(posts.id NOT IN (SELECT R.postId FROM Rating R WHERE R.userId="+userId+"))")

);

【讨论】:

以上是关于Sequelize - 如何从一个表中获取未被另一表关联的条目的主要内容,如果未能解决你的问题,请参考以下文章

如何从一个表中获取另一表中不存在的行

如何从另一张表中获取完全匹配的数据?

Datatable C# - 如何根据 ID 从一个表中获取详细记录及其关联的另一表中的子记录

SQL - 如何从一个表中获取重复记录并连接到另一张表

如何从一个表中获取包含另一表的详细信息的记录计数

Sequelize 从 belongsTo 关系中获取值