2011-06-27 112 views
0

我使用sql刪除重複記錄,但它不工作。誰能幫我。如何從表sql服務器刪除重複記錄

我的SQL是

delete from VehicleInfoForParts where 
Stock_Code not in 
(
select max(Stock_Code) from VehicleInfoForParts group by stock_code,makeid,modelid 
) 

感謝

+0

確保以下查詢僅返回要保留的ID列表。通過stock_code,makeid,modelid從VehicleInfoForParts組中選擇max(Stock_Code) –

回答

3

如果你在SQL Server 2005和了,你可以用一個CTE(公共表表達式)就實現這一目標:

;WITH DupData AS 
(
    SELECT Stock_Code, MakeID, ModelID, 
     ROW_NUMBER() OVER(PARTITION BY stock_code,makeid,modelid ORDER BY Stock_Code DESC) 'RowNum' 
    FROM 
     dbo.VehicleInfoForParts 
) 
DELETE FROM DupData 
WHERE RowNum > 1 

基本上,CTE中的SELECT語句按照(stock_code,makeid,modelid)對數據進行分組 - 即這三個元素中的每個「組」都從一開始獲取連續的row_number。數據按照stock_code的順序排列,因此最大的數字是第一個數字,因爲它與RowNum = 1一致 - 因此其他數據(具有RowNum > 1)是重複的,可以刪除。

1

您正在按照您希望獲得最大值的列進行分組。你可能需要做的是爲表中的每一行刪除一行,其中該行的主ID不是最大值(或者如果第二行出錯,則爲最小值)。

DELETE 
FROM VehicleInfoForParts t1 
WHERE PrimaryID NOT IN (SELECT MIN(PrimaryID) FROM VehicleInfoForParts t2 WHERE t2.Stock_Code = t1.Stock_Code) 
0

以下查詢對刪除重複行非常有用。此示例中的表具有標識作爲標識列,具有重複數據的列是列1,列2和列3。

DELETE 

FROM TableName 

WHERE ID NOT IN 

(

SELECT MAX(ID) 

FROM TableName 

GROUP BY Column1, Column2, Column3 

)