0

我将一个表加入到自身中以查找重复的行

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`

谢谢!

4

3 回答 3

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 演示

于 2012-10-15T05:57:49.770 回答
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 演示

附言

我稍微使用(和修改)了吴宇森的桌子。

编辑

此查询的相对较好的结果:

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

小提琴就在这里

于 2012-10-15T06:17:05.673 回答
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
于 2012-10-15T05:58:03.687 回答