如何在 jooq 中用多个字段做一个 mysql 等同于 group_concat 的操作?
How to do a mysql equivalent of group_concat with multiple fields in jooq?
我们如何在 jooq 中实现这个语句的等价物?
select course.course_id,
group_concat(course_user.user_id, ":", course_user.current_state)
from course
left join course_user
on course.course_id = course_user.course_id
group by course.course_id;
以上 mysql 中的结果类似于
1 58:COMPLETED,11908:ASSIGNED,11919:COMPLETED,11920:ASSIGNED
2 11913:PENDING_APPROVAL,11919:COMPLETED,11921:COMPLETED
我们如何在 jooq 中实现这一点? jooq 中的 groupConcat 只接受一个 Field 参数或者接受一个 Field 和一个分隔符字符串。
我用 groupConcat over concat 解决了这个问题 -
DSL.groupConcatDistinct(DSL.concat(COURSE_USER.USER_ID, DSL.val(":"), COURSE_USER.CURRENT_STATE))
出于某种原因,如果我不使用 distinct,我会将每个条目作为两个值。可能是因为它对 concat 执行一次,对 group concat 执行一次?如果是这种情况,那么它肯定效率较低。在我找到更好的方法或者如果这里有人可以给我更好的方法之前,我会坚持下去。
我们如何在 jooq 中实现这个语句的等价物?
select course.course_id,
group_concat(course_user.user_id, ":", course_user.current_state)
from course
left join course_user
on course.course_id = course_user.course_id
group by course.course_id;
以上 mysql 中的结果类似于
1 58:COMPLETED,11908:ASSIGNED,11919:COMPLETED,11920:ASSIGNED
2 11913:PENDING_APPROVAL,11919:COMPLETED,11921:COMPLETED
我们如何在 jooq 中实现这一点? jooq 中的 groupConcat 只接受一个 Field 参数或者接受一个 Field 和一个分隔符字符串。
我用 groupConcat over concat 解决了这个问题 -
DSL.groupConcatDistinct(DSL.concat(COURSE_USER.USER_ID, DSL.val(":"), COURSE_USER.CURRENT_STATE))
出于某种原因,如果我不使用 distinct,我会将每个条目作为两个值。可能是因为它对 concat 执行一次,对 group concat 执行一次?如果是这种情况,那么它肯定效率较低。在我找到更好的方法或者如果这里有人可以给我更好的方法之前,我会坚持下去。