如何避免GROUP_CONCAT中的重复?

Joe*_*mov 18 sqlite concatenation duplication

我有查询,如果它们属于一个组,则连接字符串.

    SELECT e.id, 
        ke.value,
        re.value AS re_value,
        GROUP_CONCAT(g.value,', ')
        FROM entry e
                INNER JOIN k_ele ke ON e.id = ke.fk
                INNER JOIN r_ele re ON e.id = re.fk
                INNER JOIN sense s ON e.id = s.fk
                INNER JOIN gloss g ON s.id = g.fk
WHERE g.lang IS NULL
GROUP BY s.id
ORDER BY re_value
Run Code Online (Sandbox Code Playgroud)

GROUP_CONCAT(g.value,',')

给出了这个结果.

深情的关系,深情的关系,深情的关系,深情的关系,爱的关系,爱的关系,爱的关系,爱的关系

正如您所看到的,连接中存在重复.如何避免连接中的重复?

Joe*_*mov 32

GROUP_CONCAT(DISTINCT g.value)
Run Code Online (Sandbox Code Playgroud)

  • 这工作,但SQLite中使用`GROUP_CONCAT(DISTINCT`的时候,你不能指定一个分隔符,如果你想的分隔符更改默认`,`你要么必须使用子查询方法,因为显示在CL的答案,或使用替换(我认为子查询方法要好得多). (7认同)
  • 我不得不把它塞进一个已经讨厌的查询中,所以我选择了```replace(GROUP_CONCAT(DISTINCT g.value),',',the_delimiter)```.这很糟糕,但是如果你坚持使用其他分隔符和一个非常大的查询会使子查询变得困难,我想展示一个快速处理这个问题的方法.你必须肯定你的价值观中没有逗号,才能使其发挥作用. (5认同)

CL.*_*CL. 6

您必须在应用GROUP_CONCAT之前删除重复项,这通常需要一个子查询:

SELECT a, GROUP_CONCAT(b)
FROM (SELECT DISTINCT a, b
      FROM MyTable)
GROUP BY a
Run Code Online (Sandbox Code Playgroud)