5

行が重複しているテーブルをクリーンアップする必要があります。

id: serial id
gid: group id
url: string <- this is the column that I have to cleanup

gid複数の値を持つ場合がありますurl

id    gid   url
----  ----  ------------
1     12    www.gmail.com
2     12    www.some.com
3     12    www.some.com <-- duplicate
4     13    www.other.com
5     13    www.milfsome.com <-- not a duplicate

gidテーブル全体に対して 1 つのクエリを実行し、とurlが重複しているすべての行を削除したいと考えています。上記のサンプルでは、​​削除後に 1、2、4、および 5 だけを残したいと考えています。

4

2 に答える 2

13
;WITH x AS 
(
   SELECT id, gid, url, rn = ROW_NUMBER() OVER
     (PARTITION BY gid, url ORDER BY id) 
   FROM dbo.table
)
SELECT id,gid,url FROM x WHERE rn = 1 -- the rows you'll keep
-- SELECT id,gid,url FROM x WHERE rn > 1 -- the rows you'll delete
-- DELETE x WHERE rn > 1; -- do the delete

保持する行を示す最初の選択に満足したら、それを削除し、2 番目の選択のコメントを外します。削除する行を示していることに満足したら、それを削除し、削除のコメントを外します。

データを削除したくない場合は、SELECT...の下のコメント行を無視してください。

于 2013-04-04T14:43:43.603 に答える