私はExpressアプリケーションでSequelizeを使用しています。 WHERE
句にサブクエリを持つクエリを生成する必要があります。Sequelize - subquery in where句
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でwhere句でサブクエリを行う「適切な」方法だかどうかわから動作しますが、ありません。
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、明らかにsequelize.literalを使用しているのが当面の唯一の方法です。 – galileopy
'sequelize.literal(...)'を使っているようですが –
私はあなたが(未テスト)に役立つこのsrcを見つけました。 http://srlm.io/2015/02/04/sequelize-subqueries/ –