Как сделать mysql-эквивалент group_concat с несколькими полями в 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? GroupConcat в jooq принимает только один параметр поля или принимает одно поле и одну строку-разделитель.


person mns    schedule 16.10.2016    source источник


Ответы (1)


Я решил это, используя groupConcat вместо concat таким образом -

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

По какой-то причине, если я не использую отдельный, я получаю каждую запись как два значения. Вероятно, потому что он выполняется один раз для concat и еще раз для группового concat? Если это так, то это, безусловно, менее эффективно. Я буду придерживаться этого, пока я не найду лучший подход или если кто-то здесь не предложит мне лучший подход.

person mns    schedule 17.10.2016