2017-01-26 9 views
0

У меня есть сценарий, где я бы хотел, чтобы нижний запрос выполнялся с использованием sequelize.Подзапрос та же таблица: Sequelize

выберите * от мастера, где catg_level = 1 и obj_id in (выберите obj_id из master, где catg_level = 2) по порядку;

У меня есть следующий код, написанный в дальнейшем.

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

Я бы предпочтительно не хочу использовать прямую обработку запросов по соображениям производительности. Есть ли обходной путь для этого? –

 Смежные вопросы

  • Нет связанных вопросов^_^