postgresql - 如何在 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;
有没有办法正确地写这个?
解决方案
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))
推荐阅读
- javascript - 是否可以选择一个包含 h1 的锚标记,其中包含文本“访问站点”?
- c - 如何在汇编中编写 If, Else if
- javascript - 如何制作 JS if 语句来查看值是否不是某些字符串?
- python - 哪个模块管理多个树中的节点?
- ios - 使用 performBatchUpdates 同时删除行、删除部分和重新加载行时 UITableView 崩溃
- c# - 我正在尝试将记录插入到对象列表中,但是当我调用该方法时没有插入任何内容。我究竟做错了什么?
- python - 如何在熊猫列表中打印值==字符串的行
- pandas - 使用时间序列列名操作列时出现熊猫键错误
- c++ - 如何在 C++ 中获取要更新的值
- pandas - 寻找一种使用应用函数将列添加到数据框的有效方法