Join 中的 Sequelize 或条件

Posted

技术标签:

【中文标题】Join 中的 Sequelize 或条件【英文标题】:Sequelize Or condition in Join 【发布时间】:2020-11-25 16:23:32 【问题描述】:

我正在尝试使用带有自定义连接条件的 Sequelize ORM 进行查询。

有例子:

User.findAll(include: [model: Post, where: active: true]

这是连接条件的结果:

INNER JOIN `posts` AS `post` ON `users`.`id` = `post`.`user_id` AND `post`.`active`=true

我想要做的是将 AND 条件替换为 OR 并观察如下内容:

INNER JOIN `posts` AS `post` ON `users`.`id` = `post`.`user_id` OR `post`.`active`=true

我不知道有没有办法做到这一点。

【问题讨论】:

获取所有活跃帖子是否有意义,即使它们与某个用户无关? 这只是一个例子,我想将 AND 替换为 OR 【参考方案1】:

您不能使用 OR 向 JOIN 条件添加条件。您只能添加可以使用 OR 的其他外部条件。

User.findAll(
   where: 
     [Op.or]: [
        '$Post.somefield$': sequelize.col('some_user_field') ,
        '$Post.someotherfield$': sequelize.col('some_other_user_field') 
     ]
   ,
  include: [
    model: Post
  
])

这个查询在 SQL 中会是这样的:

SELECT * FROM USERS as `users`
INNER JOIN `posts` AS `post` ON `users`.`id` = `post`.`user_id`
WHERE
  `post`.`somefield`=`users`.`some_user_field`
 OR
  `post`.`someotherfield`=`users`.`some_other_user_field`

【讨论】:

以上是关于Join 中的 Sequelize 或条件的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 Sequelize 更改列或添加新列时更新迁移文件

如何使用 sequelize 基于 sqlite3 中的“日期”列进行查询?

Sequelize 从 belongsTo 关系中获取值

使用自定义连接表主键 Sequelize BelongsToMany

使用 sequelize 可以进行 TRANSACTION 吗?

如何使用 TypeScript 正确键入 Sequelize JOIN?