Я использую Sequelize в своем экспресс-приложении. Мне нужно сгенерировать запрос с подзапросом в предложении WHERE
.Sequelize - подзапрос в том, где статья
SELECT *
FROM MyTable
WHERE id NOT IN (
SELECT fkey
FROM MyOtherTable
WHERE field1 = 1
AND field2 = 2
AND field3 = 3
)
я впервые попробовал отношения/ассоциации через свои модели, но не мог заставить его работать. Что-то вроде:
MyTable.find({
where: {
id: {
$notIn: // <= what goes here? Can I somehow reference my include model?
}
},
include: [ {
model: MyOtherTable,
where: {
field1: 1,
field2: 2,
field3: 3
} ]
});
Затем я попытался с помощью Sequelize.where()
, не повезло там.
Затем я попытался Sequelize.literal()
и что работает, но не уверен, если это «правильный» способ сделать подзапрос в котором положение в Sequelize, как я новичок в этом.
MyTable.find({
where: {
id: {
$notIn: sequelize.literal(
'(SELECT fkey ' +
'FROM MyOtherTable ' +
'WHERE field1 = ' + field1 +
' AND field2 = ' + field2 +
' AND field3 = ' + field3 +
')'
}
}
});
Я также знаю, что я мог бы использовать Sequelize.query()
, но на самом деле не знаю, если я должен тянуться к нему, или если literal()
это право далеко, как я чувствую, что есть что-то я с видом.
Мне очень хотелось бы знать, как выполнить подзапрос в предложении WHERE
с Sequelize «надлежащий» способ.
Благодарим вас за отзыв!
Глядя на СО, я пришел к этой проблеме github https://github.com/sequelize/sequelize/issues/3961 через этот вопрос http://stackoverflow.com/questions/38882185/sequelize-statementwhere-in-statementwhere/39040218 # 39040218, и, по-видимому, использование sseelize.literal - единственный способ на данный момент. – galileopy
Кажется, что использовать 'sequelize.literal (...)' все еще путь –
Я нашел этот src, который может вам помочь (UNTESTED). сообщите мне о своем тесте после того, как вы последуете этому http://srlm.io/2015/02/04/sequelize-subqueries/ –