首页 > 解决方案 > 使用 Sequelize.js 创建一个 JOIN WHERE key IN(SELECT key FROM...)

问题描述

我是 Sequelize.js 中的菜鸟,在 Angular 中稍微少一些,但必须解决我想使用子查询作为 JOIN 条件的问题。我在下面粘贴了一些示例,因为代码说的比文字多。

SQL

INNER JOIN table ON table.key IN(SELECT current_key FROM historysnake WHERE original_key IN(
       SELECT original_key FROM historysnake WHERE current_key = table.key)
AND historysnake.model = 'tablename')

问题是:如何将上述查询放入 Sequelize 对象?就像是:

续集.js

var foo = sequelize.define('foo', {...}, {
    classMethods: {
        associate: function(models) {
            foo.hasMany(...)
        }
    }
});

标签: javascriptmysqlsequelize.js

解决方案


好的,这是一个示例,假设 PatientEvents 的 PK 是所有历史记录行上的 original_key:

PatientEvents.hasMany(HistorySnake, {foreignKey : 'original_key'});

PatientEvents.findAll({
   include: [{
       model: HistorySnake,
       required : true,      // true = INNER JOIN but you might need outer join to see events with no history
       where : { modelName : 'PatientEvents' }  // as needed
       }],
   where: { patient_name : 'xyz' }  // as needed
   })        

推荐阅读