【问题标题】:mysql concat_ws without duplicates没有重复的mysql concat_ws
【发布时间】:2012-03-18 03:48:23
【问题描述】:

我正在尝试将几个字段连接成一个字段,但只在结果字符串中保留唯一值。

例子:

title_orig | title_fr   | title_de                | title_it
---------------------------------------------------------------------
KANDAHAR   | KANDAHAR   | REISE NACH KANDAHAR     | VIAGGO A KANDAHAR
SCREAM 2   | SCREAM 2   | SCREAM 2                | SCREAM 2

CONCAT_WS(', ', title_orig, title_fr, title_de, title_it) AS titles 我会得到

titles
------------------------------------------------------------
KANDAHAR, KANDAHAR, REISE NACH KANDAHAR, VIAGGO A KANDAHAR
SCREAM 2, SCREAM 2, SCREAM 2, SCREAM 2

但我想得到

titles
------------------------------------------------
KANDAHAR, REISE NACH KANDAHAR, VIAGGO A KANDAHAR
SCREAM 2

在 PostgreSQL 中,我使用了 plperl 存储过程 (%seen=(); return join(", ", grep {$_ && ! $seen{$_}++} @_)。

如何去除 MySQL 中的重复数据?

【问题讨论】:

    标签: mysql duplicates concatenation


    【解决方案1】:

    需要一些工作:

    SELECT 
      CONCAT(
        title_orig,
        IF(title_fr=title_orig,'',CONCAT(', ',title_fr)),
        IF(title_de=title_orig OR title_de=title_fr,'',CONCAT(', ',title_de)),
        IF(title_it=title_orig OR title_it=title_fr OR title_it=title_de,'',CONCAT(', ',title_it))
      ) AS title_concat
    FROM
      ...
    

    【讨论】:

      【解决方案2】:

      还有一个使用group_concat()的替代方案,但是也比较麻烦:

      SELECT id, group_concat(
        DISTINCT titles
        ORDER BY titles
        SEPARATOR ', ')
      FROM (
        SELECT id, title_orig AS titles FROM test
        UNION ALL SELECT id, title_fr FROM test 
        UNION ALL SELECT id, title_de FROM test 
        UNION ALL SELECT id, title_it FROM test
      ) AS tmp
      GROUP BY id;
      

      【讨论】:

        猜你喜欢
        • 2011-09-23
        • 1970-01-01
        • 2013-01-10
        • 2015-04-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 2013-04-27
        相关资源
        最近更新 更多