Sequelize.js NodeJS Sequelize-使用嵌套选择查询删除

Sequelize.js NodeJS Sequelize-使用嵌套选择查询删除,sequelize.js,Sequelize.js,我有一个SQL查询,如: delete from myTable where versionId in (select id from version where code='TEST') 嵌套在删除查询中的选择查询。我想使用NodeJS Sequelize构建相同的查询,因此代码可以是这样的: db.myTable.destroy({ where: { versionId: { $in: [12, 34, 56] } } }).t

我有一个SQL查询,如:

delete from myTable where versionId in (select id from version where code='TEST') 
嵌套在删除查询中的选择查询。我想使用NodeJS Sequelize构建相同的查询,因此代码可以是这样的:

db.myTable.destroy({
        where: {
          versionId: { $in: [12, 34, 56] }
        }
    }).then(nbDeleted => {
        ...
    }
在那个例子中,[12,34,56]是硬编码的,但是我想使用select查询来代替它

我试着用那种方式在谷歌上搜索,但现在我找不到解决办法

有什么想法吗?

你想要的是一个好主意。试试这个:

db.myTable.destroy({
    where: {
      versionId: { 
        $in: [
          sequelize.literal("select id from version where code='TEST'")
        ] 
      }
    }
}).then(nbDeleted => {
    ...
}
Sequelize将直接将该文本放入where in子句中,而不进行任何处理。

您要的是一个。试试这个:

db.myTable.destroy({
    where: {
      versionId: { 
        $in: [
          sequelize.literal("select id from version where code='TEST'")
        ] 
      }
    }
}).then(nbDeleted => {
    ...
}

Sequelize只需将该文本直接放入where in子句中,而无需任何处理。

谢谢您的回答,但如果这样,“无需任何处理”,SQL注入可能会有问题,因为“TEST”必须是一个参数?值“TEST”是从用户发送的吗?如果是这样,你是对的,你需要对它进行消毒。如果不是,那么SQL注入就不会成为问题——除非您计划自己发起攻击!你的问题的真实背景是什么?您要从哪个表中删除?“TEST”值在实践中从何而来?检查后,用户将永远不会发送参数,因此我不需要对其进行消毒。再次感谢您的回答,但是如果这样,“没有任何处理”,SQL注入可能会有问题,因为'TEST'必须是一个参数?值'TEST'是从用户发送的吗?如果是这样,你是对的,你需要对它进行消毒。如果不是,那么SQL注入就不会成为问题——除非您计划自己发起攻击!你的问题的真实背景是什么?您要从哪个表中删除?“TEST”值在实践中从何而来?检查后,用户将永远不会发送参数,因此我不需要对其进行消毒。又是Thx。