首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jOOQ幂等批量插入

jOOQ幂等批量插入
EN

Stack Overflow用户
提问于 2020-12-16 12:50:55
回答 1查看 138关注 0票数 3

我试图实现一个幂等插入,这个查询看起来很适合这个任务

代码语言:javascript
复制
insert into test_table
select *
from (
         values (1, 2, 3, 4),
                (3, 4, 5, 6),
                (1, 2, 3, 4),
                (3, 4, 5, 6)
     ) as data(a, b, c, d)
where not exists(select 1
                 from test_table
                 where test_table.a = data.a
                   and test_table.b = data.b
                   and test_table.c = data.c);

请帮助将此查询翻译到jOOQ DSL。

我使用了格林梅数据库,不支持ON CONFLICT语法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-17 11:23:51

代码语言:javascript
复制
ctx.insertInto(TEST_TABLE)
   .select(
       select()
       .from(values(
           row(1, 2, 3, 4),
           row(3, 4, 5, 6),
           row(1, 2, 3, 4),
           row(3, 4, 5, 6)
       ).as("data", "a", "b", "c", "d"))
       .whereNotExists(
           selectOne()
           .from(TEST_TABLE)
           .where(TEST_TABLE.A.eq(field(name("data", "a"), TEST_TABLE.A.getDataType())))
           .and(TEST_TABLE.B.eq(field(name("data", "b"), TEST_TABLE.A.getDataType())))
           .and(TEST_TABLE.C.eq(field(name("data", "c"), TEST_TABLE.A.getDataType())))
       )
   )
   .execute();

这个答案假设您正在为TEST_DATA使用代码生成器(否则,手动构造标识符,如上面为name("data", "a")或如图所示所示)。此外,它还假定:

代码语言:javascript
复制
import static org.jooq.impl.DSL.*;

当格林梅获得正式支持时,请参见#4700,然后ON CONFLICTON DUPLICATE KEY IGNORE可以为您效法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65323651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档