Postgresql jOOQ插入。。哪里不存在博士后

Postgresql jOOQ插入。。哪里不存在博士后,postgresql,jooq,Postgresql,Jooq,我正在尝试为jOOQ的博士后做一个upsert风格的陈述。我运行的框架在这种特定情况下处理并发性问题,所以我不担心这一点。我只使用jOOQ创建SQL,实际执行是通过Spring的JdbcTemplate和BeanPropertySqlParameterSource完成的 我决定分两步插入..不存在的地方/更新。。过程 我的SQL是: insert into mytable (my_id, col1, col2) select :myId, :firstCol, :secondCol wh

我正在尝试为jOOQ的博士后做一个upsert风格的陈述。我运行的框架在这种特定情况下处理并发性问题,所以我不担心这一点。我只使用jOOQ创建SQL,实际执行是通过Spring的JdbcTemplate和BeanPropertySqlParameterSource完成的

我决定分两步插入..不存在的地方/更新。。过程

我的SQL是:

insert into mytable (my_id, col1, col2) select :myId, 
   :firstCol, :secondCol where not exists (select 1 
   from mytable where my_id = :myId)
我用的是Postgres9.4,Jooq3.5。我不知道如何在select中表示jOOQ参数,在jOOQ中表示where not exists子句


在我的情况下,更改编程语言或数据库的建议是不可行的。

如果希望在jOOQ中重用命名参数,理想情况下,您可以在查询之外创建AST元素,如下所示:

//假设静态导入 导入静态org.jooq.impl.DSL.*; Param myId=parammyId,Integer.class; 然后,您可以在查询中多次使用它:

使用配置 .插入MY_TABLE,MY_TABLE.MY_ID,MY_TABLE.COL1,MY_TABLE.COL2 选择 选择 myId, paramfirstCol,MY_TABLE.COL1.getType, paramsecondCol,MY_TABLE.COL2.getType .哪里不存在 选通 .从我的桌子 .where MY_TABLE.MY_ID.eqmyId ;
所以如何在JOOQ中的SQL语句中使用来自多个位置的单个查询参数?太棒了!谢谢选择。选择选择。。。对我来说,这就是失去的魔力!