【问题标题】:XOR comparison between two Conditions in JooQJooQ中两个条件之间的异或比较
【发布时间】:2020-05-14 01:56:00
【问题描述】:

在 PostgreSQL 中的 WHERE 条件下,我有以下形式的内容:

a != b

其中 a 和 b 是布尔值。

但是,JooQ 决定布尔值是 Condition,它只知道 orand。我可以转换为 DNF,但这大大降低了可读性(因为它变成了(a and !b) or (!a and b))。

还有其他方法可以实现这个用例吗?

示例

假设我有以下 SQL 代码:

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 类的方法。

有什么办法吗?

【问题讨论】:

    标签: java postgresql jooq


    【解决方案1】:

    我发现我可以使用DSL.field(Condition)Condition 包装为FieldField 类确实有一个 notEqual 方法。我之前的例子变成如下:

    where(DSL.field(DSL.field("field_a", Integer.class).isNotNull()).notEqual(DSL.field(DSL.field("field_b", Integer.class).isNull()))))
    

    我不认为它是最优雅的,但绝对比使用 DNF 更优雅。

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      相关资源
      最近更新 更多