2017-07-27 71 views
0

删除我有这样一个SQL查询:的NodeJS Sequelize - 与嵌套select查询

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]是硬编码的,但代替它,我想喜欢使用选择查询。

我试图用这种方式进行搜索,但现在我无法找到解决方案。

任何想法?

回答

2

你所追求的是literal。试试这个:

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

Sequelize只会将该文字直接放入您的where-in子句中而不进行任何处理。

+0

感谢您的回答,但通过这种方式,“没有任何处理”,由于'TEST'必须是参数,所以它是SQL注入的问题? – gduh

+0

值“TEST”是从用户发出的东西吗?如果是这样,你是对的,你需要清理它。如果没有,那么SQL注入将不会是一个问题 - 除非你打算自己发起攻击,对自己! 什么是你的问题的真实环境?你从哪个表中删除? 'TEST'的价值在哪里来自于实践? –

+0

检查后,参数永远不会被用户发送,所以我不需要对它进行消毒。 Thx再次。 – gduh