Orm Sequelize-where子句中的子查询
我正在我的Express应用程序中使用。我需要生成一个查询,该查询在Orm Sequelize-where子句中的子查询,orm,subquery,where-clause,sequelize.js,Orm,Subquery,Where Clause,Sequelize.js,我正在我的Express应用程序中使用。我需要生成一个查询,该查询在WHERE子句中有一个子查询 SELECT * FROM MyTable WHERE id NOT IN ( SELECT fkey FROM MyOtherTable WHERE field1 = 1 AND field2 = 2 AND field3 = 3 ) 我首先尝试通过我的模型建立关系/关联,但无法使其发挥
WHERE
子句中有一个子查询
SELECT *
FROM MyTable
WHERE id NOT IN (
SELECT fkey
FROM MyOtherTable
WHERE field1 = 1
AND field2 = 2
AND field3 = 3
)
我首先尝试通过我的模型建立关系/关联,但无法使其发挥作用。比如:
MyTable.find({
其中:{
身份证:{
$notIn://我在项目中遇到了类似的问题。
我选择的实现方式有点不同,原因有两个:
如果Sequelize在某个时间点决定实现子查询,则语法已准备就绪
对SQL注入使用Sequelize保护
这是我的代码片段,希望对你有所帮助
续集v5
const tempSQL=sequelize.dialogue.QueryGenerator.selectQuery('MyOtherTable'{
属性:['fkey'],
其中:{
字段1:1,
字段2:2,
字段3:3
}})
.slice(0,-1);//从SQL结尾删除“;”
MyTable.find({
其中:{
身份证:{
[Sequelize.Op.notIn]:Sequelize.literal(`(${tempSQL})`)
}
}
} );
续集v6
const tempSQL=sequelize.dialogue.queryGenerator.selectQuery('MyOtherTable'{
属性:['fkey'],
其中:{
字段1:1,
字段2:2,
字段3:3
}})
.slice(0,-1);//从SQL结尾删除“;”
MyTable.find({
其中:{
身份证:{
[Sequelize.Op.notIn]:Sequelize.literal(`(${tempSQL})`)
}
}
} );
有些人可能选择不使用tempSQL变量,而只是在find结构中构建SQL(可能使用helper方法?)
我还认为这可能是sequelize子查询扩展的基础,因为它几乎使用相同的语法。通过这个问题,我来到了github问题,显然使用sequelize.literal是目前唯一的方法。似乎使用sequelize.literal(…)
仍然是goI找到此src的方法,可能会对您有所帮助(未经测试)。请在您完成后告诉我您的测试。此解决方案是否允许sql注入?@Sash取决于field1
、field2
、field3
和/或它们是否已被清除/转义的源。对于本例,值在后端定义。是其中的对象在sql生成器和查找中查询安全可互换?我可以在这里和那里使用相同的语法吗?ASFAIK是的。find
方法在内部使用QueryGenerator
。这就是我第一次使用这种方法的原因。谢谢。当我需要对包含的模型使用where
的限制/偏移量时,这节省了我的时间。我生成了一个子查询,如yo我使用的是v6,但GetDialogue()方法对我来说不可用use@ShaharHadas我明白了,我在这里更彻底地阅读了其他评论,我可以使用Sequelize实例来完成它。谢谢!现在对答案投了赞成票!:)