如果基于一个字段的所有行在另一个字段上具有不同的值,则 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)
);
我正在编写 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)
);