天天看點

MSSQL如何在沒有主鍵的表中删除重複資料

為了對重複資料進行實驗,下面建一個設計不太好(沒有主鍵)表并插入了一些重複資料:

 為了驗證表确實有重複資料,下面查詢運用了一個group by 和having 子句隻傳回重複行,并對副本計數:

 結果:

MSSQL如何在沒有主鍵的表中删除重複資料

下面是運用視窗化删除重複行:

這種方法的關鍵是運用視窗化的,有row_number()函數和分區的over()子句。每個新分區會重新編号。設定over()子句為partition by每個要檢查重複資料的列。在這種情況下每一列都會進行檢查。

運作視窗化查詢,首先顯示方法如何應用于行号:

MSSQL如何在沒有主鍵的表中删除重複資料

每一個重複行都有一個比1大的rn值,是以,删除副本是比較容易的:

結果:

MSSQL如何在沒有主鍵的表中删除重複資料

執行完上面語句後,下面用一條select語句測試删除重複資料的結果:

MSSQL如何在沒有主鍵的表中删除重複資料