MySQL - 如何在没有分组的情况下获得Group_Concat的结果?

时间:2012-10-21 02:49:15

标签: mysql concat

所以我有一张这样的表:

  Item Number     Collection       Items in Collection 
    1234         Madison Park                       
    2345         Madison Park                       
    3456         Madison Park                       
    6747         Belcaro                            
    5678         Belcaro                            

我需要的是:

  Item Number     Collection       Items in Collection 
    1234         Madison Park        1234, 2345, 3456     
    2345         Madison Park        1234, 2345, 3456     
    3456         Madison Park        1234, 2345, 3456     
    6747         Belcaro             6747, 5678           
    5678         Belcaro             6747, 5678           

或者更好的是,这个:

  Item Number     Collection       Items in Collection 
    1234         Madison Park        2345, 3456           
    2345         Madison Park        1234, 3456           
    3456         Madison Park        1234, 2345           
    6747         Belcaro             5678                 
    5678         Belcaro             6747                 

这不是我获得结果的首选方法,但由于客户端规范,需要以这种方式设置表。此外,它需要通过MySQL Workbench Query完成。我已经尝试了我能想到的CONCAT_WS和GROUP_CONCAT的每个变体,但还没有设法提出解决方案。 Group_Concat返回我想要的结果,但随后它将集合分组,这将无效。想法?

1 个答案:

答案 0 :(得分:4)

尝试在分组集合值上将表连接到自身。 GROUP_CONCAT()会返回一个字符串,因此你可以REPLACE()当前行item_number,但是你不知道逗号的确切位置,所以虽然它是一个黑客你可以使用SEPARATOR ' '然后REPLACE()来自当前行的item_number,将两个空格的出现替换为一个(item_number位于中间),TRIM()它(item_number在最后),然后用逗号后跟空格替换单个空格:

SELECT i.item_number,
        i.collection,
        REPLACE(REPLACE(TRIM(REPLACE(g.items, i.item_number, '')), '  ', ' '), ' ', ', ') AS collection_items
FROM    item_table i
        INNER JOIN 
        (
            SELECT collection,
                    GROUP_CONCAT(item_number SEPARATOR ' ') AS items
            FROM item_table
            GROUP BY collection
        ) g ON g.collection = i.collection

我在本地进行了测试并获得了预期的结果。

SQLFiddle Demo