javascript - 我该如何在 Sequelize 中使用WITH

标签 javascript sql sequelize.js

我有这个查询:

WITH tempA AS (SELECT conversationId FROM participant WHERE userId = "aaa"),
     tempB AS (SELECT conversationId FROM participant WHERE userId = "bbb")
SELECT conversationId 
FROM tempA, tempB 
WHERE tempA.conversationId = tempB.conversationId;

查询将返回两个用户参与的对话的 ID。

我在 Sequelize 中也有一个参与模型:

const Participation = sequelize.define("participation", {
    //...attributes
});

module.exports = Participation;

如何在不使用 sequelize.query 的情况下在 Sequelize 中执行上述查询?

最佳答案

您可以使用scopes以获得相同的效果。这是一个粗略的例子:

   /* for the ON clause of JOIN */
   participation.hasMany(participation, {
      sourceKey : 'userId',
      foreignKey: 'userId',
      as: 'selfJoin'
      });

   participation.addScope('tempA', {
      attributes: ['message_id'],
      where: {userId: 'aaa'}
      });

  participation.addScope('tempB',{
      attributes: ['message_id'],
      where: {userId: 'bbb'}
      });


   participation.scope('tempB').findAll({    
      attributes: ['message_id'],
      include: [{
         model: participation.scope('tempA'),
         required: true,
         as: 'selfJoin',
         attributes: []
        }]
     });

关于javascript - 我该如何在 Sequelize 中使用WITH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55677097/

相关文章:

javascript - 为什么我在 put 请求中的更新会覆盖 Sequelize 中的整个记录​​?

javascript - 在JS中,为什么不记录catch(err)中的参数显示完整的响应对象?

javascript - Angular 服务解耦

javascript - 如何使用 React.createElement 基于 prop 或变量动态创建组件

sql - NHibernate/EF Linq 中的案例声明

sql - LINQ 和 Lambda 表达式等效于 SQL In

sql - 约束自引用外键以限制嵌套(SQL、Sequelize)

javascript - Bootstrap 3.3.7 hidden-lg-up 不工作

mysql - SQL 论坛转换脚本(IPB 到 SMF)卡住了

javascript - DataTypes.ARRAY(DataTypes.STRING) 上的 Sequelize 错误