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

问题描述 投票:0回答:1

使用 Postgres 14.5(和 jOOQ 3.17.6),假设以下

options
表定义:

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

...有数据:


|信 | is_selected |
|一个 | (空) |
|乙 | (空) |
|丙 | (空) |
| ... | (空) |

我怎样才能写一个更新来表明

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()
java sql jooq
1个回答
2
投票

从 jOOQ 3.17 和 #11969 开始,假设你的

BOOL
专栏真的是一个
BOOLEAN
:

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

原因是对于 #11969

Condition
现在是
Field<Boolean>
的子类型,这是这里所期望的。在 jOOQ 3.17 之前,您始终可以使用
Condition
 显式地将 
Field<Boolean>
包裹在
DSL.field(Condition)

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

另请参阅手册中有关布尔列的这一部分

© www.soinside.com 2019 - 2024. All rights reserved.