javascript - 可以在 Sequelize 中嵌套包含的 WHERE 吗?

标签 javascript sql orm sequelize.js

我遇到了一个一直困扰我的问题,但无济于事 - 看起来与 Where condition for joined table in Sequelize ORM 的性质相似,除了我想查询以前的连接。也许代码会解释我的问题。很高兴提供任何额外的信息。

型号:

A.hasMany(B);
B.belongsTo(A);
B.hasMany(C);
C.belongsTo(B);

这就是我希望能够通过 Sequelize 实现的目标:

SELECT *
FROM `A`AS `A`
LEFT OUTER JOIN `B` AS `B` ON `A`.`id` = `B`.`a_id`
LEFT OUTER JOIN `C` AS `B->C` ON `B`.`id` = `B->C`.`b_id`
    AND (`B`.`b_columnName` = `B->C`.`c_columnName`);

这就是我想象的工作方式: (相反,它将创建一个原始查询(2 个原始查询,用于 A-B/C),在连接上使用 AND ( `C`.`columnName` = '$B.columnName$'))(第二个参数是一个字符串)。尝试过 sequelize.colsequelize.where(sequelize.col... 等。)

A.findOne({
    where: { id: myId },
    include: [{
        model: B,
        include: [{
            model: C,
            where: { $C.c_columnName$: $B.b_columnName$ }
        }]
    }]
});

最佳答案

使用 Op.col 查询运算符来查找与查询中的其他列匹配的列。如果您只加入一个表,您可以传递一个对象而不是数组以使其更简洁。

const Op = Sequelize.Op;

const result = await A.findOne({
  include: {
    model: B,
    include: {
      model: C,
      where: {
        c_columnName: {
          [Op.col]: 'B.b_columnName',
        },
      }
    },
  },
});

关于javascript - 可以在 Sequelize 中嵌套包含的 WHERE 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56698348/

相关文章:

sql - 根据一列的值对另一列进行过滤

sql - 再次数据库、表和列命名约定

mysql - MySQL 中的计数查询

java - Spring boot JPA - 不带 OneToMany 关系的嵌套对象的 JSON

node.js - nodejs sequelize 连接查询

java - 如何在 JPA @Query 注释中使用 IN 子句

javascript - Warning : setState(. ..): Can only update a mounted or mounting component on a new reactjs app

javascript - 如何给不同的 append 元素添加js代码?

javascript - Meteor 发布和订阅路由

javascript - 如何在 Holder.js 图像中使用 Bootstrap Glyphicons