`
小抽又回来了
  • 浏览: 10685 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

SQL删除指定条件的重复数据,只保留一条

阅读更多

SQL删除指定条件的重复数据两个属性,只保留一条

DELETE C FROM ceshi C 

JOIN (

    SELECT COUNT(id), MIN(Id) Id, idcard,idcount FROM ceshi GROUP BY idcard,idcount having count(id )>1

) TMP ON C.idcard = TMP.idcard AND C.idcount = TMP.idcount AND C.id <> TMP.Id

 

  • SQL删除指定条件的重复数据,只保留一条

     
    DECLARE @Count INT = 1
    WHILE @Count > 0
    BEGIN
    DELETE TB FROM TableName TB 
    WHERE TB.ID IN (SELECT MIN(ID) FROM TableName TB2
    GROUP BY TB2.Column1,TB2.Column2,...TB2.ColumnN
    HAVING COUNT(1) > 1);
    SET @Count = @@ROWCOUNT;
    END

    这里使用了循环删除,并不是最优的方法,欢迎园友不吝批评指正。 


    其实还有一种方法是先查询重复的数据,然后在重复数据中保留一条。 下面用例子说明。

    例如表City有如下的数据:

    查询出重复的数据,Id只保留其中一个

    SELECT MIN(Id) Id,Name FROM dbo.City 
    GROUP BY Name
    HAVING COUNT(1) >  1

    然后使用删除时Join上面的表

    DELETE C FROM City C 
    JOIN (
        SELECT MIN(Id) Id,Name FROM dbo.City
        GROUP BY Name
        HAVING COUNT(1) >  1
    ) TMP ON C.Name = TMP.Name AND C.Id <> TMP.Id

    另外一种方法是园友Adeal2008指出的使用row_number()来处理,感谢Adeal2008提供思路,这也是一种方法。

http://t.zoukankan.com/godbell-p-8727804.html

 

分享到:
评论

相关推荐

    sql+如何去重复数据,数据库去重复数据

    使用`ROW_NUMBER()`函数去除基于`employee_id`和`order_date`的重复记录,并保留每组中的第一条记录: ```sql WITH cte AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY employee_id, order_date ORDER BY ...

    查询和删除表中重复数据sql语句

    标题和描述概述的知识点主要集中在SQL语言中处理表内重复数据的方法上,涵盖了查询与删除重复数据的不同场景。下面将详细解析这些知识点: ### 查询表中重复数据 #### 单字段重复数据查询 ```sql SELECT * FROM ...

    如何删除表中重复数据

    ### 如何删除表中重复数据 在数据库管理与维护的过程中,经常会遇到表中存在重复记录的问题,这不仅会造成数据冗余、浪费存储空间,还可能导致数据分析结果失真。因此,了解如何有效地删除表中的重复数据是一项重要...

    Oracle删除表中的重复数据

    通过`ROWNUM`函数和子查询的方式,进一步保证了即使有多条记录在上述列上完全相同,也只会有一条被插入到临时表中。 3. **删除原表并重命名临时表**:最后,通过`DROP TABLE tlinkman;`和`ALTER TABLE tlinkman2 ...

    oracle下如何删除重复数据的几种方法

    ### Oracle 下删除重复数据的方法及分析 #### 一、部分字段重复数据的处理 ##### 查询重复数据 在Oracle数据库中,经常会遇到表中存在部分字段重复的情况。为了找到这些重复的记录,我们可以使用以下SQL语句: `...

    SQL 资料 SQL中常用的数据类型 SQL中创建数据库的语法,创建表的语法

    - 这条语句用于向表`table1`中插入一条记录,其中`field1`和`field2`是表中的字段,`value1`和`value2`是对应的值。 - **删除数据**: ```sql DELETE FROM table1 WHERE condition; ``` - 这条语句用于从表`...

    Oracle数据库删除表中重复记录的方法三则.txt

    - 此方法仅删除具有最大ROWID的重复记录,保留其余重复记录中的任意一条。 - 如果需要保留特定的记录(例如最新的记录),则需要根据实际情况调整条件。 - ROWID是一种内部地址,用于快速定位表中的行。但ROWID...

    sql_查询重复记录方法大全.txt

    删除重复记录并保留每个组的一条记录 **示例:** ```sql DELETE FROM people WHERE peopleId IN (SELECT peopleId FROM people GROUP BY peopleId HAVING COUNT(peopleId) &gt; 1) AND rowid NOT IN (SELECT MIN...

    SQL必知必会样例格数据以及SQL脚本.zip

    在IT领域,SQL(Structured Query Language)是一种用于管理和处理关系数据库的强大语言,是任何数据库管理员、数据分析师或软件开发者的基础技能。"SQL必知必会样例格数据以及SQL脚本.zip"这个压缩包文件显然包含了...

    sql2008数据查询大全

    ### SQL Server 2008 数据查询大全及基础知识解析 #### 概述 本文档旨在对SQL Server 2008中的数据查询及相关基础知识进行详细总结。这些内容不仅适用于SQL Server 2008,大部分原理和技术也适用于其他版本的SQL ...

    (参考)查询和删除同一表内一个或多个字段重复记录的SQL语句.pdf

    首先,查询重复记录的基本思路是通过比较表中的每一条记录与其他记录的对应字段是否相同。例如,在人员表`peosons`中,如果想要找出姓名、身份证号、住址完全相同的记录,可以使用以下SQL语句: ```sql SELECT p1.*...

    MSSQL2005中删除重复项

    在处理数据库时,经常会遇到需要清理数据的情况,特别是在SQL Server这样的关系型数据库...简单在于只需一条SQL语句即可完成任务;复杂则体现在如何高效准确地定位并删除重复项。希望本文能为读者提供一定的参考价值。

    SQL常用查询语句大全

    例如,`INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2)`将向表中添加一条新记录。 3. UPDATE语句:更新已存在的记录。例如,`UPDATE 表名 SET 列1 = 新值 WHERE 条件`会将满足条件的记录的列1的值更新为新值。 4....

    SqlServer 2005中使用row_number()在一个查询中删除重复记录

    `RowNumber &gt; 1` 的条件会删除除每个分区第一行外的所有行,即保留每组唯一记录的第一条。 最后,使用`SELECT * FROM #temp`查看处理后的结果,确认重复记录已被删除。 这个方法的优点在于,它可以在一个查询中...

    写出高性能SQL语句的35条方法

    但需注意,`TRUNCATE`不能用于删除表的部分行,且删除后的数据无法恢复,适用于无需保留数据历史的情况。这一技巧对于定期清理大表的历史数据尤为有效。 #### 选择最有效的表名顺序 **方法四:优化表名顺序** 在...

    达梦数据库_SQL语言手册

    因此在嵌入方式下,除了数据查询语句一次查询一条记录外,还有几种与游标 有关的语句: 游标的定义、打廾、关闭、拨动语句 游标定位方式的数据修改与删除语句。 为了有效维护数据库的完整性和一致性,支持 的并发...

    Oracle 常用SQL技巧经典收藏

    例如,删除ROWID较大的重复记录,只保留ROWID最小的一条。 4. **使用TRUNCATE替代DELETE**:当需要清空表时,使用TRUNCATE命令比DELETE更快,因为它不涉及回滚段,不需要记录每一行的删除信息。然而,TRUNCATE是DDL...

    一条sql语句完成MySQL去重留一

    这个成功的SQL语句巧妙地避免了直接在删除过程中引用被删除的表,而是通过关联子查询来确定要删除的记录,从而实现了高效且准确的去重保留一条的功能。这种做法在处理大量重复数据时,效率显著高于使用代码遍历的...

    几种sql去重

    如果某个分组中包含超过一条记录,则返回该分组的所有记录。这种方式通常用于查找重复记录,并可进一步用于删除这些重复项。 ### 方法三:使用子查询删除重复记录 有时候我们需要直接删除重复的数据行,这可以通过...

Global site tag (gtag.js) - Google Analytics