我有一个事务表,其中包含多个列,这些列对应于主表中的主键 . 基本上简单的一对一关系 .
我正在使用限制来浏览可能有多少交易 . 当与orderAll函数中的所有关系一起使用order并急切加载时,生成的查询将生成LIMIT使用的FROM子句的子查询 . 另一方面,ORDER应用于外部查询 .
这不提供所需的结果,因为订单不应用于整个数据集,而是应用于子查询返回的集合 .
有没有办法可以在子查询上应用订单 .
我正在使用Sequelize 1.7.9
db.Transaction.findAll({
order: '`transactions`.`some_date` DESC',
limit: 10,
offset: 10,
include: [{
model: db.Master1,
attributes:['name'],
include: [{
model: db.Master2,
attributes:['name']
}]
}, {
model: db.Master3,
include: [{
model: db.Master4,
attributes: ['name']
}]
}, {
model: db.Master5,
attributes: ['name'],
where: {
id: '12345'
}
}]
})
产生表单的SQL
SELECT `transactions`.*,
`master1`.`name` AS `master1.name`,
`master1.master2`.`name` AS `master1.master2.name`,
`master3`.`name` AS `master3.name`,
`master3.master4`.`name` AS `master3.master4.name`
FROM
(SELECT `transactions`.*,
`master5`.`id` AS `master5.id`
FROM `transactions`
INNER JOIN `master5` AS `master5` ON `master5`.`id` = `transactions`.`session_id`
AND `master5`.`id`='12345' LIMIT 10, 10) AS `transactions`
LEFT OUTER JOIN `master1s` AS `master1` ON `master1`.`id` = `transactions`.`id`
LEFT OUTER JOIN `master2s` AS `master1.master2` ON `master1.master2`.`id` = `master1`.`id_fk`
LEFT OUTER JOIN `master3s` AS `master3` ON `master3`.`id` = `transactions`.`master3_id`
LEFT OUTER JOIN `master4s` AS `master3.master4` ON `master3.master4`.`id` = `master3`.`master4_id`
ORDER BY `transactions`.`some_date` DESC;
订单可以某种方式转移到子查询中吗?
SELECT `transactions`.*,
`master1`.`name` AS `master1.name`,
`master1.master2`.`name` AS `master1.master2.name`,
`master3`.`name` AS `master3.name`,
`master3.master4`.`name` AS `master3.master4.name`
FROM
(SELECT `transactions`.*,
`master5`.`id` AS `master5.id`
FROM `transactions`
INNER JOIN `master5` AS `master5` ON `master5`.`id` = `transactions`.`session_id`
AND `master5`.`id`='12345'
ORDER BY `transactions`.`some_date` DESC
LIMIT 10, 10) AS `transactions`
LEFT OUTER JOIN `master1s` AS `master1` ON `master1`.`id` = `transactions`.`id`
LEFT OUTER JOIN `master2s` AS `master1.master2` ON `master1.master2`.`id` = `master1`.`id_fk`
LEFT OUTER JOIN `master3s` AS `master3` ON `master3`.`id` = `transactions`.`master3_id`
LEFT OUTER JOIN `master4s` AS `master3.master4` ON `master3.master4`.`id` = `master3`.`master4_id`;