ユーザー名列のすべての重複を基本的に検索する次のクエリがあります。
SELECT `username`
FROM `instagram_user`
GROUP BY `username`
HAVING COUNT( * ) >1
テーブルに一意のユーザー名が 1 つだけ残るように、すべての重複を削除するにはどうすればよいですか? テーブルに一意のユーザー名が 1 つある限り、どのエンティティが永続化または削除されるかは気にしません。
これが SQL サーバー用かどうかわからない場合は、mysql で同様のコードを試すことができます。
;With CteUsers AS(
SELECT *,ROW_NUMBER() OVER (PARTITION BY username Order by username) AS ROWID
FROM(
SELECT PkId, `username`
FROM `instagram_user`
)tbltemp)
SELECT * FROM CteUsers;
これは次のようになります
PkId username RowId
1 xx 1
2 xx 2
....
次に、RowId > 1 の場所を削除します
;CteUsers AS(
SELECT *,ROW_NUMBER() OVER (PARTITION BY username Order by username) AS ROWID
FROM(
SELECT PkId, `username`
FROM `instagram_user`
)tbltemp)
DELETE instagram_user WHERE PkId iN (SELECT PkId FROM CteUsers WHERE ROWID > 1);