首页 > 解决方案 > 如何在 JOOQ 中为 PostgreSQL 编写正确的布尔比较

问题描述

我有一个带有布尔列 b 的表 t。

db.select(T.B).from(T).where(T.B.isTrue()).fetch();
db.select(T.B).from(T).where(T.B.eq(Boolean.TRUE)).fetch();

这两个语句都被转换为相同的 sql 查询:

select "public"."T"."B" from "public"."T" where "public"."T"."B" = true;

这不起作用,因为必须使用布尔比较关键字“is”:

select "public"."T"."B" from "public"."T" where "public"."T"."B" is true;

有没有办法正确地写这个?

标签: postgresqljooq

解决方案


jOOQ 目前不支持 SQL<boolean test>表达式(即x IS [ NOT ] <truth value>

但是,在“真实”情况下,无论如何这并不是必需的。您可以将列直接传递给 where 子句:

where(T.B)

...同样的效果。要获得逆谓词,您可以编写

where(not(T.B))

如果您想要一个空安全比较,您还可以使用Field.isNotDistinctFrom()Field.isDistinctFrom()

where(T.B.isNotDistinctFrom(true))
where(T.B.isDistinctFrom(true))

推荐阅读