And that’s how we can delete duplicate records in SQL Server with tables without primary key, containing primary key and by keeping one original row. 原文链接:http://www.codesec.net/view/449563.html
(1, 101), (1, 101), (2, 102); -- 删除重复行 WITH DuplicateRows AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY StudentID, CourseID ORDER BY (SELECT NULL)) AS RowNum FROM StudentCourses ) DELETE FROM StudentCourses WHERE StudentID IN (SELECT StudentID FROM DuplicateRows...
WITHDuplicateRecordsAS(SELECT*,ROW_NUMBER()OVER(PARTITIONBYOrderID,ProductNameORDERBYOrderDate)ASRowNumFROMSalesRecords)DELETEFROMDuplicateRecordsWHERERowNum>1; 1. 2. 3. 4. 5. 6. 7. 在这里,我们采用了“折叠块”形式来隐藏更复杂的命令,便于使用者来快速定位核心内容。 /* 高级命令:可用于更复杂的数...
BEGINTRY-- 尝试删除重复记录DELETEFROMUsersWHEREUserIDIN(SELECTUserIDFROM(SELECTUserID,ROW_NUMBER()OVER(PARTITIONBYUserName,EmailORDERBYUserID)ASRowNumberFROMUsers)asTempWHERERowNumber>1);ENDTRYBEGINCATCH-- 错误处理SELECTERROR_MESSAGE()ASErrorMessage;ENDCATCH; 1. 2. 3. 4. 5. 6. 7. 8. 9. ...
Microsoft SQL Server 2005 中引入的ROW_NUMBER 函数使此操作变得更加简单: SQL DELETETFROM(SELECT* , DupRank = ROW_NUMBER()OVER(PARTITIONBYkey_valueORDERBY(SELECTNULL) )FROMoriginal_table )ASTWHEREDupRank >1 此脚本按给定顺序执行以下操作:
TUser表中有3条重复的数据,我们现在希望删掉前2条,保留第3条 WITH [CTE DUPLICATE] as (SELECT RN=ROW_NUMBER() OVER (ORDER BY name) FROM TUser where Name='Tom' ) delete from [CTE DUPLICATE] where RN<3 执行该sql语句后,数据库中记录有5条变为3条,分别是...
在SQL Server 2005 上,我们也可以用 TOP 命令。像下面这样: SELECT * FROM dbo.duplicateTest DELETE TOP(1) FROM dbo.duplicateTest WHERE ID = 1 SELECT * FROM dbo.duplicateTest 删除前与删除后的对比如下: 总结 1、这个方法可以在表中没有明显标志字段来区分每一行的情况,但也有局限,如果一个表中...
-- Syntax for SQL Server and Azure SQL Database[WITH<common_table_expression>[ ,...n ] ]DELETE[TOP( expression ) [PERCENT] ] [FROM] { {table_alias||rowset_function_limited[WITH(table_hint_limited[ ...n ] ) ] } | @table_variable} [<OUTPUT Clause>] [FROMtable_source[ ,...n ...
c , ID from table group by duplicate_col have c > 1;这样拿到的id都是duplicate的id,delete ...
-- Now delete the duplicate records WITH CTE(id,name,age,Duplicates) AS ( SELECT id,name,age, ROW_NUMBER() OVER (PARTITION BY id, name, age ORDER BY id) AS Duplicates FROM Test ) DELETE FROM CTE WHERE Duplicates > 1 GO Now check the table to make sure duplicates are being removed...