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 つのエントリを取得したいだけです。

`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 デモ

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

フィドルはこちらです。

于 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 に答える