使用 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()
从 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"))))