我们怎样才能在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和一个分隔符字符串。
答案 0 :(得分:3)
我通过这种方式使用groupConcat over concat来解决它 -
DSL.groupConcatDistinct(DSL.concat(COURSE_USER.USER_ID, DSL.val(":"), COURSE_USER.CURRENT_STATE))
出于某种原因,如果我不使用distinct,我将每个条目作为两个值。可能是因为它为concat执行一次并且再次为group concat执行?如果是这种情况那么肯定效率较低。直到我找到一个更好的方法或者如果这里的某个人可以给我一个更好的方法,我会坚持这一点。