【问题标题】:Subquery the same table : Sequelize子查询同一张表:Sequelize
【发布时间】:2017-06-11 17:35:50
【问题描述】:

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

select * from master where catg_level = 1 and obj_id in (select obj_id from master where 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 生成了这个

条件 catg_level = 2 被添加到主查询中,而不是作为子查询添加。我知道这是实际功能。但是有没有解决方法来完成这项工作?请指教。

提前致谢。

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    你可以使用sequelize.literal:

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

    【讨论】:

    • 出于性能原因,我最好不要使用直接查询。有什么解决方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 2019-05-08
    • 2020-03-31
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多