mysql - 使用sequelize,在where子句中使用连接表的列值的正确方法是什么?

标签 mysql sequelize.js

我正在MySQL 数据库上使用sequelize。我正在获取一张表上的所有记录,同时将其与另一张表连接起来。如果不满足连接表上的 WHERE 条件,我尝试不包含结果。在 WHERE 子句中,我尝试将主表中的值与连接表进行比较,但它不起作用:

const expiredMemberships = await Membership.findAll({
include: [
  {
    model: User,
    attributes: ['id'],
    include: [
      {
        model: Post,
        required: true,
        attributes: ['id', 'created'],
        where: {
          created: {
            [Op.gt]: '$Membership.created$',
          },
        },
      },
    ],
  },
],
attributes: ['id', 'created'],
where: {
  isActive: true,
},

});

它创建以下查询:

SELECT `Membership`.`id`, 
       `Membership`.`created`, 
       `user`.`id` AS `user.id`, 
       `user->posts`.`id` AS `user.posts.id`, 
       `user->posts`.`created` AS `user.posts.created` 
  FROM `membership` AS `Membership` 
  LEFT OUTER JOIN ( `user` AS `user` INNER JOIN `post` AS `user->posts` 
       ON `user`.`id` = `user->posts`.`user_id` 
      AND `user->posts`.`created` > 'Invalid date' ) 
  ON `Membership`.`user_id` = `user`.`id` 
  AND (`user`.`deleted` = '9999-12-31 23:59:59') 
WHERE `Membership`.`is_active` = true;

您可以看到它显示'$Membership.created$'无效日期。在 where 子句中使用连接表的列值的正确方法是什么?

最佳答案

您可以使用别名为成员(member)表的创建字段执行类似的操作,例如membership_created

const expiredMemberships = await Membership.findAll({
   include: [
    {
      model: User,
      attributes: ['id'],
      include: [
         {
             model: Post,
             required: true,
             attributes: ['id', 'created'],
             where: {
             created: {
                [Op.gt]: 'membership_created',
              },
         },
     },
   ],
  },
],
attributes: ['id', ['created', 'membership_created']],
where: {
      isActive: true,
    },
});

关于mysql - 使用sequelize,在where子句中使用连接表的列值的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56589532/

相关文章:

node.js - 如何抛出我自己的不显示调用堆栈的错误?

sql - MySQL REGEXP 怎么写?

node.js - 在 where 子句中使用 OR 时出错

mysql - 将正在运行的 Play 应用程序部署到 CloudBees 时如何修复 MySQL 语法错误?

mysql - 我如何加入这些表并获得所需的结果

express - Bcrypt + Sequelize 密码未在数据库中保存为哈希

sequelize.js - SequelizeDatabaseError : relation "equipment" does not exist

node.js - node js sequelize where条件如果不等于 checkin

mySQL 触发错误代码 1064

php - mysql转换问题。警告:mysqli_fetch_all()期望参数1为mysqli_result,在中给出 bool 值