【问题标题】:JOOQ query to return a boolean if all rows based on a field has different value on another field如果基于一个字段的所有行在另一个字段上具有不同的值,则 JOOQ 查询返回一个布尔值
【发布时间】:2021-12-01 23:59:15
【问题描述】:

我正在编写一个 JOOQ 查询。例如我有这张桌子

ID Name Status
1 Erick Single
2 James Single
3 Erick Single
4 Erick Married

我想检查是否所有“Erick”都是“Single”。在这种情况下,它应该返回 false。

我尝试了这个 JOOQ 查询,我猜它有效:

return !context.fetchExists(
        context.selectFrom(TABLE_NAME)
        .where(TABLE_NAME.NAME.eq("Erick"),
                TABLE_NAME.STATUS.ne("Single"))
        ));

还有更优雅的方法吗?我的目标是在指针遇到“已婚”的“Erick”时立即返回,同时查询可读。

【问题讨论】:

    标签: sql jooq


    【解决方案1】:

    你的方法很好,但我猜你真的在寻找the EVERY aggregate function

    return context.fetchValue(
        select(every(TABLE_NAME.STATUS.eq("Single")))
        .from(TABLE_NAME)
        .where(TABLE_NAME.NAME.eq("Erick"))
    );
    

    甚至这个。这可能比上面的要慢,具体取决于您的 RDBMS 是否仍然可以为此使用索引,但您的实际查询可能更复杂,and you might need to aggregate multiple values in one go

    return context.fetchValue(
        select(every(TABLE_NAME.STATUS.eq("Single"))
            .filterWhere(TABLE_NAME.NAME.eq("Erick")))
        .from(TABLE_NAME)
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 2021-06-27
      • 2021-10-24
      • 1970-01-01
      • 2010-11-13
      • 2015-04-09
      相关资源
      最近更新 更多