【问题标题】:How to do a mysql equivalent of group_concat with multiple fields in jooq?如何在jooq中使用多个字段做一个相当于group_concat的mysql?
【发布时间】:2016-10-17 18:46:20
【问题描述】:

我们如何在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 和一个分隔符字符串。

【问题讨论】:

    标签: mysql jooq


    【解决方案1】:

    我以这种方式通过使用 groupConcat 而不是 concat 解决了它 -

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

    由于某种原因,如果我不使用 distinct,我会将每个条目作为两个值。可能是因为它对 concat 执行一次,然后对组 concat 执行一次?如果是这种情况,那么它肯定效率较低。在我找到更好的方法之前,或者如果这里有人可以给我更好的方法,我会坚持下去。

    【讨论】:

      猜你喜欢
      • 2012-09-28
      • 2011-11-22
      • 2021-08-21
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 2017-08-08
      相关资源
      最近更新 更多