2017-01-26 60 views
0

我有一個場景,我希望使用sequelize執行下面的查詢。子查詢同一個表:Sequelize

select * from master where catg_level = 1 and obj_id in(select obj_id from master where catg_level = 2)by order by order;

我用下面的代碼編寫了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被添加到主查詢,而不是被添加爲子查詢。我明白這是實際運作。但是有沒有解決方法來完成這個工作?請指教。

在此先感謝。

回答

0

您可以使用sequelize.literal

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

我最好不要使用直接查詢性能的原因。有沒有解決方法? –