如果您的意思是 Table1 包含具有 idBusiness1、idBusiness2、idBusiness3、... 值的字段 idBusiness,那么您希望以 SQL 格式实现的是
db.seq.query('
SELECT * FROM Business
INNER JOIN Table1 ON Table1.idBusiness = Business.idBusiness ').success(function(rows) {
res.json(rows);
});
使用 ORM 格式,您将使用带有 include 参数的预加载:
Table1.findAll({
include: [{
model: Business,
required: true
}]
}).then(results => {
/* ... */
}.);
如果您的意思是您有 3 个不同的字段,并且想要获得 id 至少等于其中一个的业务名称:
SELECT * from Business
INNER JOIN Table1 ON Business.idBusiness IN (Table1.idBusiness1, Table1.idBusiness2, Table1.idBusiness3)
在ORM格式中我能想到的最简单的方法是
Business.findAll({
where: { id: list }
}
您将从 findAll 查询中获取 Table1 中的所有 id,并将结果转换为所有这些 id 的数组。我猜 Table1.findAll{} 的结果将是格式
[{idBusiness1: 1, idBusiness2: 2, idBusiness3: 3}, {idBusiness1: 42, idBusiness2: 32, idBusiness: 70}]
因此,只需一点代码,您就可以遍历此列表以形成另一个
finalList = [];
list.forEach((item) => {
finalList.push(item.idBusiness1)
finalList.push(item.idBusiness2)
finalList.push(item.idBusiness3)
}
如果 Table1 中有超过 3 个字段,则可以遍历 Javascript 对象的属性以概括这 3 个推送。如果是这种情况,请告诉我,您需要帮助。
更新:
自从 OP 澄清后,在查询中设置 required:false 会将内连接变成左(外)连接。
当您添加 where 选项时,它会自动将 required 设置为 true,这会将连接变为内部连接。请参阅http://docs.sequelizejs.com/class/lib/model.js~Model.html#findalloptions-promisearrayinstance 处的参数options.include[].where 的描述。
在 Sequelize 语法中似乎不可能加入同一个表,您将包含与您调用查找的表相同的表。这就是为什么 Sequelize 在这些特定情况下支持原始查询......