子查询相同的表:Sequelize

时间:2017-01-26 09:22:04

标签: mysql node.js sequelize.js

我有一个场景,我希望使用sequelize执行以下查询。

  

从master中选择* catg_level = 1和obj_id in(从master中选择obj_id,其中catg_level = 2)按位置排序;

我使用sequelize编写的代码如下。

Master.all({
  where: {catg_level: '1'}, 
  order: 'position ASC', 
  include: [{
    model: Master, 
    as: 'sub-menu', 
    where: {catg_level: '2'}
  }]
})
.then(function(a){
  try {
    console.log(JSON.stringify(a));
  } catch (e) {
    console.log(e);
  }
});

SQL生成了这个

enter image description here

条件catg_level = 2被添加到主查询中,而不是作为子查询添加。我明白这是实际的功能。但有没有办法解决这个问题呢?请指教。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用sequelize.literal

{
    where: {
        catg_level: '1',
        obj_id:{
            in:[sequelize.literal('(select obj_id from master where catg_level = 2)')]
        }
    },
    order: 'position ASC',
}