如何用Knex实现类似指定SQL的INSERT...SELECT插入操作?
正确的Knex实现方案
问题分析
你的目标是通过INSERT ... SELECT批量插入数据,但之前的Knex代码存在表名错误、逻辑颠倒和语法问题,导致无法实现需求。
正确代码实现
knex('school_tasks_daily') .insert(function() { // 构建SELECT子句:固定值7作为school_id,搭配homework_tasks中的task_id this.select( knex.raw('? as school_id', [7]), 'task_id' ) .from('homework_tasks') .where('day', 'sunday'); })
代码说明
- 调用
knex('school_tasks_daily')指定要插入的目标表 insert方法接收回调函数,内部构建原SQL中的SELECT查询部分- 使用
knex.raw('? as school_id', [7])安全生成固定值列(避免SQL注入风险),对应原SQL中的7 - 从
homework_tasks表中选取task_id,并通过where过滤出day为sunday的记录
原代码问题点
- 表名错误:
knex('school]')应为knex('school_tasks_daily') - 逻辑错误:原需求是从
homework_tasks取数据插入,而非从目标表查询并判断存在性 - 语法错误:
where('day', sunday))多了闭合括号,且sunday未加引号(应作为字符串值传入)
内容的提问来源于stack exchange,提问作者Lital Kaminsky
相关产品推荐
相关产品推荐

