mysql自我加入group_concat而没有重复

问题描述 投票:2回答:1

我想摆脱我的数据库中的重复。可以有一个标准的若干重复,然后将它们组合在一起。

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

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

但现在结果如下:

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

当然这是正确的。问题是,我希望在结果中已经显示为重复的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`
mysql duplicates group-concat self-join
1个回答
1
投票

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

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
© www.soinside.com 2019 - 2024. All rights reserved.