I'm using Sequelize in my Express app. I need to generate a query that has a subquery in the WHERE
clause.
SELECT *
FROM MyTable
WHERE id NOT IN (
SELECT fkey
FROM MyOtherTable
WHERE field1 = 1
AND field2 = 2
AND field3 = 3
)
I first tried relations/associations through my models but couldn't get it to work. Something like:
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
} ]
} );
Then I tried using Sequelize.where()
, no luck there.
Then I tried Sequelize.literal()
and that works but not sure if it's a "proper" way of doing a subquery in a where clause in Sequelize as I'm new to it.
MyTable.find( {
where: {
id: {
$notIn: sequelize.literal(
'( SELECT fkey ' +
'FROM MyOtherTable ' +
'WHERE field1 = ' + field1 +
' AND field2 = ' + field2 +
' AND field3 = ' + field3 +
')'
}
}
} );
I also know that I could use Sequelize.query()
but don't really know if I should reach for it or if literal()
is the right away as I feel like there's something I'm overlooking.
I would really like to know how to perform a subquery in a WHERE
clause with Sequelize the "proper" way.
Thanks for the feedback!
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…