我有一个事务表,其中包含多个列,这些列对应于主表中的主键 . 基本上简单的一对一关系 .

我正在使用限制来浏览可能有多少交易 . 当与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`;