显示重复的行号

时间:2012-10-15 05:55:34

标签: mysql sql duplicates

我自己加入了一个表来查找重复的行

select a.data, a.rowNumber, b.rowNumber
from DuplicateRows as a
join DuplicateRows as b 
on
a.data = b.data and a.Id != b.Id
group by a.data, a.rowNumber, b.rowNumber

此查询提供类似

的结果
"content" | 1 | 2
"content" | 1 | 6
"content" | 2 | 1
"content" | 2 | 6 
...and so on

如何重写它以使结果形成像

"content" | 1 | 2, 6

修改

我认为问题应该稍微纠正一下。 你知道我不想得到倒置的结果,我的意思是我只想得到 一个条目

`1 -> 2, 6` 

不是

`1 -> 2, 6 and `2 -> 1, 6`

谢谢!

3 个答案:

答案 0 :(得分:4)

使用GROUP_CONCAT

SELECT  a.data, 
        a.rowNumber, 
        GROUP_CONCAT(b.rowNumber)
FROM    DuplicateRows AS a
        INNER JOIN DuplicateRows AS b 
            ON  a.data = b.dataAND a.Id != b.Id
GROUP BY a.data, a.rowNumber

SQLFiddle Demo

答案 1 :(得分:3)

根据您最新的编辑,我认为这正是您所需要的:

SELECT a.data, a.a, GROUP_CONCAT( DISTINCT b.a)
FROM TableName as a
JOIN TableName as b 
    ON a.data = b.data AND a.a < b.a
GROUP BY a.data

SQLFiddle Demo

PS

我稍微使用(和修改过)John Woo的桌子。

修改

此查询的结果相对较好:

SELECT a.data, MIN(a.rowNumber), GROUP_CONCAT( DISTINCT b.rowNumber)
FROM DuplicateRows AS a
JOIN DuplicateRows AS b 
  ON a.data = b.data AND a.rowNumber < b.rowNumber
GROUP BY a.data

小提琴是here

答案 2 :(得分:1)

在mysql中尝试GROUP_CONCAT函数

select a.data, a.rowNumber, group_concat(b.rowNumber)
from DuplicateRows as a
join DuplicateRows as b 
on
a.data = b.data and a.Id != b.Id
group by a.data, a.rowNumber, b.rowNumber