java 如何执行jOOQ更新,其中值分配取决于同一行的另一列的值?

jaql4c8m  于 2023-04-19  发布在  Java
关注(0)|答案(1)|浏览(122)

使用Postgres 14.5(和jOOQ 3.17.6),假设以下options表定义:

CREATE TABLE options (
  letter       uuid  NOT NULL,
  is_selected  bool  NULL,
);

...with data:

| letter | is_selected |
| A      | (null)      |
| B      | (null)      |
| C      | (null)      |
| ...    | (null)      |

如何编写一个更新来指示选择了B而其他值没有被选择?
我尝试了几件事:

jooq
  .update(OPTIONS)
  .set(OPTIONS.IS_SELECTED, OPTIONS.LETTER == val("B")) <-- this didn't work because I
                                                            think this a memory address
                                                            comparison

  .set(OPTIONS.IS_SELECTED, OPTIONS.LETTER.equal(val("B"))) <-- this doesn't compile

  .execute()
2guxujil

2guxujil1#

从jOOQ 3.17和#11969开始,假设你的BOOL列实际上是一个BOOLEAN,这可以很好地编译:

.set(OPTIONS.IS_SELECTED, OPTIONS.LETTER.equal(val("B")))

原因是,对于#11969Condition现在是Field<Boolean>的子类型,这是这里所期望的。

.set(OPTIONS.IS_SELECTED, field(OPTIONS.LETTER.equal(val("B"))))

See also this section of the manual about boolean columns

相关问题