如何在jooq中使用多个字段的mysql等效的group_concat?

时间:2016-10-16 13:30:39

标签: mysql 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和一个分隔符字符串。

1 个答案:

答案 0 :(得分:3)

我通过这种方式使用groupConcat over concat来解决它 -

DSL.groupConcatDistinct(DSL.concat(COURSE_USER.USER_ID, DSL.val(":"), COURSE_USER.CURRENT_STATE))

出于某种原因,如果我不使用distinct,我将每个条目作为两个值。可能是因为它为concat执行一次并且再次为group concat执行?如果是这种情况那么肯定效率较低。直到我找到一个更好的方法或者如果这里的某个人可以给我一个更好的方法,我会坚持这一点。