在PostgreSQL的WHERE条件中,我有如下形式的内容。
a != b
其中a和b是boolean。
然而,JooQ决定了boolean是一个 Condition
只知道 or
和 and
. 我可以将其转换为DNF,但这大大降低了可读性(因为这样就会变成 (a and !b) or (!a and b)
).
有没有其他方法来实现这个用例?
假设我有下面的SQL代码,我想把它转换成类似这样的JooQ代码。
WHERE (field_a IS NOT NULL) != (field_b IS NULL)
我想把它转换成类似这样的JooQ代码。
where(DSL.field("field_a", Integer.class).isNotNull().notEq(DSL.field("field_b", Integer.class).isNull()))
我不能,因为 notEq
并不是一个方法,在 Condition
类。
有什么方法可以做到这一点吗?
我发现我可以把 Condition
作为 Field
使用 DSL.field(Condition)
. 该 Field
类确实有一个 notEqual
方法。我之前的例子就变成了下面这个样子。
where(DSL.field(DSL.field("field_a", Integer.class).isNotNull()).notEqual(DSL.field(DSL.field("field_b", Integer.class).isNull()))))
我不认为这是最优雅的,但绝对比使用DNF更优雅。