我有一个mysql数据库,我通过node.js中的sequelize访问 .
我想加入3个表 .
关系是:
Person n : n Work (associated through PersonWork having foreign key for Person and Work)
Work n : n Book (associated through BookWork having foreign key for Book and Work)
我想加入Person,Work和Book .
现在我在节点中嵌套2个查询,但结果似乎相当慢 .
SQLPersonWork.findAll({ where: {}, include: [SQLWork, SQLPerson] }).success(function (sqlresult) {
sqlresult.forEach(function ProcessPersonWorkResult(oneresult) {
var work = oneresult.work;
var name = oneresult.person.name;
(function (work, name) {
SQLBookWork.findAll({ where: { "work_id": work.id }, include: [SQLBook] }).success(function (sqlbookresult) {
sqlbookresult.forEach(function ProcessBookResult(onebook) {
// process result I want to get
});
});
})(work, name);
});
你可以看到双嵌套的findAll() .
有没有办法将其合并为1个查询?
1 回答
我不知道这是否是唯一的答案..
根据NodeJS Sequelize and FindAll with Include and constraints和node.js sequelize associations, include on condition这似乎不可能没有直接sql - 虽然这种似乎违背了续集的目的 .
这也快得多 .