• SQL Server 一列或多列重复数据的查询,删除(转载)


    转载来源:https://www.cnblogs.com/sunxi/p/4572332.html

    业务需求

    最近给公司做一个小工具,把某个数据库(数据源)的数据导进另一个数据(目标数据库)。要求导入目标数据库的数据不能出现重复。但情况是数据源本身就有重复的数据。所以要先清除数据源数据。

    于是就把关于重复数据的查询和处理总结一下。这里只可虑基于数据库解决方案。不考虑程序的实现。

    环境为:SQL Server 2008

    基于数据库的解决方案

    数据库测试表dbo.Member

    一、单列重复

    一,带有having条件的分组查询方法

    (1)查询某一列重复记录

    语句:

      SELECT  Name FROM  dbo.Member t WHERE Name IN (SELECT Name FROM dbo.Member GROUP BY Name HAVING COUNT(Name)>1 ) ORDER BY t.Name

    查询结果:

    (2)查询某一列不重复的记录

    语句:

    SELECT * FROM dbo.Member WHERE ID  IN (SELECT MIN(ID) FROM dbo.Member GROUP BY Name)

    查询结果:

    (3)清除某一列重复的数据

    语句:

     DELETE FROM dbo.Member WHERE ID NOT IN (SELECT MIN(ID) FROM dbo.Member GROUP BY Name)

    执行结果:

    解释:上面的例子只保存了各自Name的最小值。

    二,DISTINCT 的用法
    温馨提醒:
    不支持多列统计
    Oracle和DB2数据库也适用

    利用distinct关键字返回唯一不同的值

    (1)查询某一列不重复数据

    语句:

      SELECT DISTINCT Name FROM dbo.Member

    结果集:

    (2)DISTINCT 查询多列不重复(如果查询的列有任何一个不重复,则这条记录视为不重复)

    语句:

    SELECT DISTINCT Name,Uid FROM dbo.Member
    查询结果


    DISTINCT 用于统计

    语句
     SELECT COUNT(DISTINCT(Name)) FROM dbo.Member

     二、多列重复

    数据表结构

    查找Original_ID和Match_ID这两列值重复的行

    SQL语句

    SELECT m.* FROM dbo.Match m,(
    SELECT Original_ID,Match_ID
    FROM dbo.Match
    GROUP BY Original_ID,Match_ID
    HAVING COUNT(1)>1

    ) AS m1
    WHERE m.Original_ID=m1.Original_ID AND m.Match_ID=m1.Match_ID

     

     

    查询结果

    复制代码
    复制代码


    如果本文引用了你的文章而未注明,请及时联系我。
     
     
    类似文章:
    https://www.cnblogs.com/wangfuyou/p/6058169.html
    该文章 根据多字段查询重复数据报错。
     
  • 相关阅读:
    IDAPython学习(一)
    自动提取文件系统---binwalk(一)
    Scapy Fuzz实现——S7协议从建连到“正常交流“(一)
    工控系统的指纹识别技术
    揭秘VxWorks——直击物联网安全罩门
    VxWorks Fuzzing 之道:VxWorks 工控实时操作系统漏洞挖掘调试与利用揭秘
    路由器文件系统与提取
    python 调试技巧
    拿下id_rsa
    elasticsearch 7.1 401 Unauthorized
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/10676103.html
Copyright © 2020-2023  润新知