JOOQ - 用表达式更新语句

JOOQ - Update Statement with Expression

在 PostgreSQL 中,您可以使用能够利用给定行的列值的表达式来定义 set 语句中的值,即

UPDATE some_table
SET col_a = (col_b != 1)
WHERE col_c = 'some val'

有没有办法在 JOOQ 中做到这一点? - 我查看了 JOOQ 文档,但看不到任何参考资料

关注https://www.jooq.org/doc/3.13/manual/sql-building/sql-statements/update-statement/#N6ABB6,我想你会做

update(SOME_TABLE)
.set(row(SOME_TABLE.A),
     row(SOME_TABLE.B.neg()))
.where(SOME_TABLE.C.eq("some val"));

我假设 col_aField<Boolean>,在这种情况下,您可以使用 DSL.field(Condition)Condition 包裹在 Field<Boolean> 表达式中

// As always, assuming you have this static import:
import static org.jooq.impl.DSL.*;

ctx.update(SOME_TABLE)
   .set(SOME_TABLE.COL_A, field(SOME_TABLE.COL_B.ne(1)))
   .where(SOME_TABLE.COL_C.eq("some val"))
   .execute();