mysql 自加入 group_concat 并且没有重复

mysql self join with group_concat and without duplicates

我想删除数据库中的重复项。一个标准可以有多个副本,然后将它们组合在一起。

假设 B 是 A 的副本,C 也是 A 的副本,那么结果应该是

*id* | *duplicate*     
  A  | B, C

但现在的结果是这样的:

*id* | *duplicate* 
  A  | B, C    
  B  | C

当然是对的。问题是,我希望那些已经在结果中显示为 duplicates 的 id 没有在 id 列中再次列出,它们有自己的重复项.

这里有一个例子:http://sqlfiddle.com/#!9/61692/1/0

有什么建议吗?

谢谢, 保罗

编辑:

示例来源(由 Zohar Peled 推荐):

CREATE TABLE duplicates
    (`id` int, `Name` varchar(7))
;

INSERT INTO duplicates
    (`id`, `Name`)
VALUES
    (1, 'Bob'),
    (2, 'Bob'),
    (3, 'Bob'),
    (4, 'Alice')
;

SELECT DISTINCT d1.`id`, GROUP_CONCAT(d2.`id`) as duplicates
FROM `duplicates` as d1, `duplicates` as d2 
WHERE 
d1.`id`< d2.`id` AND
d1.`Name`       = d2.`Name`   
GROUP BY d1.`id`

这是一个非常不正统的解决方案,但是嘿...

SELECT MIN(x.id) id
     , GROUP_CONCAT(DISTINCT y.id) duplicates
  FROM duplicates x 
  JOIN duplicates y
    ON y.name = x.name 
   AND y.id > x.id
 GROUP
    BY x.name