【问题标题】:Allow duplicated values at mysql group_concat operationmysql group_concat 操作中允许重复值
【发布时间】:2014-11-17 20:18:05
【问题描述】:

我,使用下面的sql语句:

SELECT  group_concat(name SEPARATOR '') FROM words WHERE id in (1,2,3,1,2)

这个语句的问题是,只有 1,2,3 中的名称会连接,但我需要 1,2,3,1,2 中的名称连接顺序。

所以我将允许重复值,我该怎么做?

【问题讨论】:

    标签: mysql group-concat


    【解决方案1】:

    假设 id 列是非唯一的?如果是这样,并且有多行,您将可以使用。

    [test]> create table words ( id int, name varchar(200));
    Query OK, 0 rows affected (0.00 sec)
    
    [test]> insert into words (id,name) values (1,'a'),(2,'b'),(3,'c'),(2,'b'),(3,'c');
    Query OK, 5 rows affected (0.00 sec)
    Records: 5  Duplicates: 0  Warnings: 0
    
    [test]> SELECT  group_concat(name ) FROM words WHERE id in (1,2,3) ;
    +---------------------+
    | group_concat(name ) |
    +---------------------+
    | a,b,c,b,c           |
    +---------------------+
    1 row in set (0.00 sec)
    

    在 where in 列表中多次指定标识符将不包括每个规范的匹配项。此外,正如您在我的示例中看到的那样,指定每次仍然会导致插入的每个匹配项都被返回。

    澄清后更新:

    如果您的 id 列是唯一的,您将不会通过这样的简单查询获得要返回的行的多个副本。做一个 UNION ALL

    唯一地表示每组重复项将起作用

     [test]> select group_concat(name) from (select name from words where id in (1,2,3) union all select name from words where id in (1,2)) a;
    +--------------------+
    | group_concat(name) |
    +--------------------+
    | a,b,c,a,b          |
    +--------------------+
    1 row in set (0.00 sec)
    

    【讨论】:

    • 对不起,但你的假设是错误的,有唯一的 id,在那种情况下有可能吗?
    • 更新了 dscr 以反映具有唯一 ID 列的重复记录
    猜你喜欢
    • 2012-07-14
    • 2013-03-23
    • 2019-05-27
    • 2011-06-01
    • 2016-04-25
    • 2021-07-07
    • 2018-10-08
    • 2017-06-27
    • 1970-01-01
    相关资源
    最近更新 更多