当前位置: 首页 > 知识库问答 >
问题:

无法使用Insert中的子查询或Spring boot NamedParameterJdbcTemplate中的更新进行批更新

段超
2023-03-14

我试图使用NamedParameterJdbcTemplate batchupdate插入多条记录。我可以在insert语句中插入记录,而无需使用子查询。但是,当我使用子查询返回的dataintegrityviolationexception时,请查找下面的代码以供参考,

 public void insertBatch(){
       String sql = "insert into emp(id, name, age) values ((select max(id) from company where managerid = :managerid), :name, :age)";
       List<Map<String, Object>> batchVales = new ArrayList<Map<String, Object>>();
       batchValues.add(new MapSqlParameterSource().addValue("name", "example").addValue("age", 30).addValue("managerid", 10).getValues());
       SqlParameterSource[] params = SqlParameterSourceUtils.createBatch(batchValues.toArray(new Map[1]));
       jdbcTemplate.batchUpdate(sql, params);
    }

在上面的代码中,我使用子查询从公司表中获取max(id)。如果使用此子查询,则返回错误。如果我删除并硬编码一些值它的工作很好。为什么batchupdate不接受子查询。我正在使用DB2数据库

共有1个答案

万俟均
2023-03-14

只有INSERT INTO...支持SELECT...表单;不支持INSERT INTO...子查询的表单。

INSERT语句的伪语法是:INSERT INTO EntityName properties_list select_语句

试试这样:

String sql = "insert into emp(id, name, age) (select max(id) from company where managerid = :managerid), :name, :age";

更新:正如评论中指出的,它应该是这样工作的:

String sql = "insert into emp(id, name, age) select max(id), :name, :age from company where managerid = :managerid;

不属于选择子查询的额外参数需要在选择子查询中合并。

 类似资料:
  • 问题内容: 我有一个一般性的问题,我将尝试通过一个例子来解释。 假设我有一个包含以下字段的表格:“ id”,“ name”,“ category”,“ appearances”和“ ratio” 我的想法是,我有几个项目,每个项目都与一个类别相关,并且多次“出现”。比率字段应包括类别中项目出现的总数中每个项目出现的百分比。 用伪代码,我需要以下内容: 对于每个类别, 找到与该 类别 相关的项目的总

  • 我想在一条语句中更新PostgreSQL和Go中的多行。有没有办法做如下事情? 还有有没有一个例子,如果用go语言执行?

  • 我在创建使用嵌套查询或使用联接更新实体CommitteeMembership的HQL时遇到问题,我首先尝试了以下查询: 但生成的SQL错误如下: 在“交叉连接”之后没有任何this使Hibernate抛出SQLGrammarException 之后,我将查询更改为使用子查询: 现在Hibernate投球 任何人都知道我如何在HQL中编写此更新查询??

  • 问题内容: 我正在尝试用另一列分组的该列的最大值更新表中的一列。 例如,假设我们有一个名为transactions的表,其中有两列:和。无论出于何种原因,我们都希望将其设置为等于每个值的最大值。 我很沮丧并且不擅长在SQL中执行这样的操作,但是到目前为止,这是我所拥有的: 问题答案: 除了@Gordon已经指出的语法错误之外,通常最好 排除空更新 : 无需更改任何内容就无需编写新的行版本(几乎需要

  • 如何通过 TypeORM 中的原始查询进行批量更新? 例如,我们有具有属性名称的模型 User 如何在一个事务中更改几个用户的名称? 类型orm版本:0.2.7 数据库:后记

  • 我得到这个错误 食品项插入失败无法添加或更新子行:外键约束失败(.,约束外键()在更新级联上引用() 我试图以一种形式将食谱添加到我的数据库中。我希望输入的数据到3个不同的表。配料表、配方表和recipe_compridient表。recipe表中有一个自动增量id作为主键,而配料id作为recipe表中的外键。 我想要配料名称,数据到配料表和名称,课程,指令到配方表加上配料表中的配料ID 要转到