zoukankan      html  css  js  c++  java
  • 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
    该文章 根据多字段查询重复数据报错。
     
  • 相关阅读:
    Cx的治疗
    [HDU2222] Keywords Search
    楼房
    [51Nod1089] 最长回文子串 V2(Manacher算法)
    [洛谷P3375] 【模板】KMP字符串匹配
    [codeVS1204] 寻找子串位置
    [洛谷P1114] “非常男女”计划
    [BZOJ2132] 圈地计划
    [COGS311] Redundant Paths
    [COGS309] [USACO 3.2] 香甜的黄油
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/10676103.html
Copyright © 2011-2022 走看看