SQL删除具有相同ID的记录,留下1

标签 sql sql-delete

奇怪的问题,我知道。我不想删除所有行并重新开始,但我们有一个开发数据库表,其中某些行具有重复的 ID,但值不同。

我想删除所有具有重复 ID 的记录,这样我就可以强制新版本表上的数据完整性并建立关系。目前,它是由代码插入和生成的 ID(旧版)。

从另一个问题我得到了这个:

delete 
   t1 
from 
   tTable t1, tTable t2 
where 
   t1.locationName = t2.locationName and  
   t1.id > t2.id

但是这不起作用,因为 ID 是相同的!

如何删除除一条 ID 相同的记录之外的所有记录?即删除同ID记录数>1的地方?如果这不可能,那么删除所有具有重复 ID 的记录就可以了。

最佳答案

SQL Server 2005 及更高版本中:

WITH    q AS
        (
        SELECT  *,
                ROW_NUMBER() OVER (PARTITION BY locationName ORDER BY id) rn
        FROM    tTable
        )
DELETE
FROM    q
WHERE   rn > 1

关于SQL删除具有相同ID的记录,留下1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5743273/

相关文章:

c# - 给定当前记录的 ID,这是选择上一条和下一条记录的正确方法吗?

sql - 在 SQL WHERE 子句中转义问号 (?)

MySQL 从 AS 中删除

php - 从多个条件中删除

php - ENUM 复选框更新数据库

mysql - 在MySQL中编写关于BEFORE UPDATE的触发器

mysql - 简单的SQL查询问题

MySQL从多个表中删除,其中键可以在同一个表的不同列中找到

php - 查询通过 phpmyadmin 执行,但不通过 php 脚本执行

MySQL DELETE FROM 以子查询为条件