如果基于一个字段的所有行在另一个字段上具有不同的值,则 JOOQ 查询 return 布尔值

JOOQ query to return a boolean if all rows based on a field has different value on another field

我正在编写 JOOQ 查询。例如我有这个 table

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

我想检查是否所有“Erick”都是“单身”。在这种情况下,它应该 return false.

我试过这个 JOOQ 查询,我想它有效:

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

有没有更优雅的方法?我的目标是立即 return 如果指针遇到“已婚”的“埃里克”,同时查询是可读的。

你的方法非常好,但我猜你真的在寻找 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)
);