精华内容
下载资源
问答
  • 删除重复记录的SQL语句 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。 1、对于第一种重复,...

    删除重复记录的SQL语句

    有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
    1、对于第一种重复,比较容易解决,使用
    select distinct * from tableName
    就可以得到无重复记录的结果集。
    如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
    select distinct * into #Tmp from tableName
    drop table tableName
    select * into tableName from #Tmp
    drop table #Tmp
    发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
    2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
    假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
    select identity(int,1,1) as autoID, * into #Tmp from tableName
    select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
    select * from #Tmp where autoID in(select autoID from #tmp2)
    最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
    3、部分关键字段重复,且记录中有ID.
    第一种方法可一次删除所有重复的..(只保留重复中ID最小的记录)。
    delete from table where id not in ( select min(id) from table group by name)
    第二种方法每次只删除重复中ID最大的一条记录。

    delete from table where id in ( select max(id) from table group by name having count(*)>1)

    4、SQL程序删除
    declare @max integer,@id integer
    declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
    open cur_rows
    fetch cur_rows into @id,@max
    while @@fetch_status=0
    begin
    select @max = @max -1
    set rowcount @max
    delete from 表名 where 主字段 = @id
    fetch cur_rows into @id,@max
    end
    close cur_rows
    set rowcount 0

    自己还得出的办法:
    select   *   from   user1     where   [id]   not   in   (select   top   1   [id]   from   user1   a   where   name=user1.name)
    --删就这样写
    delete   from   user1     where   [id]   not   in   (select   top   1   [id]   from   user1   a   where   name=user1.name)
    或 delete from user where id not in ( select max(id) from user where name=user.name)
    delete [user] where id not in (select max(id) from [user] group by name having count(*) > 1)
    max 或 min看具体情况而论。

    其他方法:
    ----A:保留id最大的行,删除其它行
    --方法1
    delete   [user]   from   [user]   t
    inner   join(select   name,max(id)   as   id   from   [user]   group   by   name)   a
    on   t.name   =   a.name   and   t.id   <>   a.id
    --方法2
    delete   [user]   from   [user]   t
    where     exists(select   *   from   [user]   where   name   =   t.name   and   id   >   t.id)

    ----B:保留id最小的行,删除其它行
    --方法1
    delete   [user]   from   [user]   t
    inner   join(select   name,min(id)   as   id   from   [user]   group   by   name)   a
    on   t.name   =   a.name   and   t.id   <>   a.id
    --方法2
    delete   [user]   from   [user]   t
    where     exists(select   *   from   [user]   where   name   =   t.name   and   id   <   t.id)

    ----C:删除所有重复的name行,一行也不留
    delete   [user]   from   [user]   t
    inner   join
    (select   id   from   [user]   a   where   exists(select   *   from   [user]   where   name   =   a.name   group   by   name   having   count(*)   >   1))   as   b
    on   t.id   =   b.id

    原文地址为:删除重复记录的SQL语句

    展开全文
  • 原文地址为:删除重复记录的SQL语句有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。1、对于第一种...
    原文地址为:删除重复记录的SQL语句

    有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
    1、对于第一种重复,比较容易解决,使用
    select distinct * from tableName
    就可以得到无重复记录的结果集。
    如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
    select distinct * into #Tmp from tableName
    drop table tableName
    select * into tableName from #Tmp
    drop table #Tmp
    发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
    2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
    假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
    select identity(int,1,1) as autoID, * into #Tmp from tableName
    select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
    select * from #Tmp where autoID in(select autoID from #tmp2)
    最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
    3、部分关键字段重复,且记录中有ID.
    第一种方法可一次删除所有重复的..(只保留重复中ID最小的记录)。
    delete from table where id not in ( select min(id) from table group by name)
    第二种方法每次只删除重复中ID最大的一条记录。
    delete from table where id in ( select max(id) from table group by name having count(*)&gt;1)
    4、SQL程序删除
    declare @max integer,@id integer
    declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
    open cur_rows
    fetch cur_rows into @id,@max
    while @@fetch_status=0
    begin
    select @max = @max -1
    set rowcount @max
    delete from 表名 where 主字段 = @id
    fetch cur_rows into @id,@max
    end
    close cur_rows
    set rowcount 0

    自己还得出的办法:
    select   *   from   user1     where   [id]   not   in   (select   top   1   [id]   from   user1   a   where   name=user1.name)   
      --删就这样写   
      delete   from   user1     where   [id]   not   in   (select   top   1   [id]   from   user1   a   where   name=user1.name)
    或 delete from user where id not in ( select max(id) from user where name=user.name) 
    delete [user] where id not in (select max(id) from [user] group by name having count(*) > 1)
    max 或 min看具体情况而论。

    其他方法:
    ----A:保留id最大的行,删除其它行   
      --方法1   
      delete   [user]   from   [user]   t     
      inner   join(select   name,max(id)   as   id   from   [user]   group   by   name)   a   
      on   t.name   =   a.name   and   t.id   <>   a.id   
      --方法2   
      delete   [user]   from   [user]   t   
      where     exists(select   *   from   [user]   where   name   =   t.name   and   id   >   t.id)  
        
      ----B:保留id最小的行,删除其它行   
      --方法1   
      delete   [user]   from   [user]   t     
      inner   join(select   name,min(id)   as   id   from   [user]   group   by   name)   a   
      on   t.name   =   a.name   and   t.id   <>   a.id   
      --方法2   
      delete   [user]   from   [user]   t   
      where     exists(select   *   from   [user]   where   name   =   t.name   and   id   <   t.id)  
        
      ----C:删除所有重复的name行,一行也不留   
      delete   [user]   from   [user]   t     
      inner   join     
      (select   id   from   [user]   a   where   exists(select   *   from   [user]   where   name   =   a.name   group   by   name   having   count(*)   >   1))   as   b   
      on   t.id   =   b.id

    转载请注明本文地址:删除重复记录的SQL语句
    展开全文
  • 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段...就可以得到无重复记录的结果集。 如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除 select disti
    有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
    1、对于第一种重复,比较容易解决,使用
    select distinct * from tableName
    就可以得到无重复记录的结果集。
    如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
    select distinct * into #Tmp from tableName
    drop table tableName
    select * into tableName from #Tmp
    drop table #Tmp
    发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
    2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
    假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
    select identity(int,1,1) as autoID, * into #Tmp from tableName
    select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
    select * from #Tmp where autoID in(select autoID from #tmp2)
    最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
    3、部分关键字段重复,且记录中有ID.
    第一种方法可一次删除所有重复的..(只保留重复中ID最小的记录)。
    delete from table where id not in ( select min(id) from table group by name)
    第二种方法每次只删除重复中ID最大的一条记录。
    delete from table where id in ( select max(id) from table group by name having count(*)&gt;1)
    4、SQL程序删除
    declare @max integer,@id integer
    declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
    open cur_rows
    fetch cur_rows into @id,@max
    while @@fetch_status=0
    begin
    select @max = @max -1
    set rowcount @max
    delete from 表名 where 主字段 = @id
    fetch cur_rows into @id,@max
    end
    close cur_rows
    set rowcount 0

    自己还得出的办法:
    select   *   from   user1     where   [id]   not   in   (select   top   1   [id]   from   user1   a   where   name=user1.name)  
      --删就这样写  
      delete   from   user1     where   [id]   not   in   (select   top   1   [id]   from   user1   a   where   name=user1.name)
    或 delete from user where id not in ( select max(id) from user where name=user.name)
    delete [user] where id not in (select max(id) from [user] group by name having count(*) > 1)
    max 或 min看具体情况而论。

    其他方法:
    ----A:保留id最大的行,删除其它行  
      --方法1  
      delete   [user]   from   [user]   t    
      inner   join(select   name,max(id)   as   id   from   [user]   group   by   name)   a  
      on   t.name   =   a.name   and   t.id   <>   a.id  
      --方法2  
      delete   [user]   from   [user]   t  
      where     exists(select   *   from   [user]   where   name   =   t.name   and   id   >   t.id)  
       
      ----B:保留id最小的行,删除其它行  
      --方法1  
      delete   [user]   from   [user]   t    
      inner   join(select   name,min(id)   as   id   from   [user]   group   by   name)   a  
      on   t.name   =   a.name   and   t.id   <>   a.id  
      --方法2  
      delete   [user]   from   [user]   t  
      where     exists(select   *   from   [user]   where   name   =   t.name   and   id   <   t.id)  
       
      ----C:删除所有重复的name行,一行也不留  
      delete   [user]   from   [user]   t    
      inner   join    
      (select   id   from   [user]   a   where   exists(select   *   from   [user]   where   name   =   a.name   group   by   name   having   count(*)   >   1))   as   b  
      on   t.id   =   b.id
    展开全文
  • 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段...就可以得到无重复记录的结果集。 如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除 select distinct
       有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

    1、对于第一种重复,比较容易解决,使用
    select distinct * from tableName
    就可以得到无重复记录的结果集。
    如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
    select distinct * into #Tmp from tableName
    drop table tableName
    select * into tableName from #Tmp
    drop table #Tmp
    发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

    2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
    假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
    select identity(int,1,1) as autoID, * into #Tmp from tableName
    select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
    select * from #Tmp where autoID in(select autoID from #tmp2)
    最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

    3、部分关键字段重复,且记录中有ID.
    第一种方法可一次删除所有重复的..(只保留重复中ID最小的记录)。
    delete from table where id not in ( select min(id) from table group by name)
    第二种方法每次只删除重复中ID最大的一条记录。
    delete from table where id in ( select max(id) from table group by name having count(*)>1)

    4、SQL程序删除
    declare @max integer,@id integer
    declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
    open cur_rows
    fetch cur_rows into @id,@max
    while @@fetch_status=0
    begin
    select @max = @max -1
    set rowcount @max
    delete from 表名 where 主字段 = @id
    fetch cur_rows into @id,@max
    end
    close cur_rows
    set rowcount 0

    得出的办法:
    select   *   from   user1     where   [id]   not   in   (select   top   1   [id]   from   user1   a   where   name=user1.name)   
      --删就这样写   
      delete   from   user1     where   [id]   not   in   (select   top   1   [id]   from   user1   a   where   name=user1.name)
    或 delete from user where id not in ( select max(id) from user where name=user.name) 
    delete [user] where id not in (select max(id) from [user] group by name having count(*) > 1)
    max 或 min看具体情况而论。

    其他方法:
    ----A:保留id最大的行,删除其它行   
      --方法1   
      delete   [user]   from   [user]   t     
      inner   join(select   name,max(id)   as   id   from   [user]   group   by   name)   a   
      on   t.name   =   a.name   and   t.id   <>   a.id   
      --方法2   
      delete   [user]   from   [user]   t   
      where     exists(select   *   from   [user]   where   name   =   t.name   and   id   >   t.id)   
        
      ----B:保留id最小的行,删除其它行   
      --方法1   
      delete   [user]   from   [user]   t     
      inner   join(select   name,min(id)   as   id   from   [user]   group   by   name)   a   
      on   t.name   =   a.name   and   t.id   <>   a.id   
      --方法2   
      delete   [user]   from   [user]   t   
      where     exists(select   *   from   [user]   where   name   =   t.name   and   id   <   t.id)   
        
      ----C:删除所有重复的name行,一行也不留   
      delete   [user]   from   [user]   t     
      inner   join     
      (select   id   from   [user]   a   where   exists(select   *   from   [user]   where   name   =   a.name   group   by   name   having   count(*)   >   1))   as   b   
      on   t.id   =   b.id
    --摘自网络
    展开全文
  • 在几千条记录里,存在着些相同记录,如何能用SQL语句,删除掉重复呢?  思考:如何仅有部分字段重复,如何查找所有记录,重复记录只显示一遍??1、查找表中多余重复记录,重复记录是根据单个字段(peopleId)来...
  • TRUNCATE是删除表中所有记录的另一种语句,与DELETE语句相比,TRUNCATE运行效率非常高,因为使用TRUNCATE语句时,SQL Server不会写入任何内容,换个角度说,TRUNCATE语句所做的修改是不能回滚的。这里需要强调一点,...
  • 这道题是我面试一家金融软件...要求能够通过一个sql语句删除所有重复的记录,并只留下重复记录中第一条记录的sql语句。 答案: delete from userinfo u3 where u3.userid in ( with aaa as(select u2.useri...
  • 如果数据库里有很多表和存储过程,要用手动鼠标右键一个个删除是很麻烦,用SQL语句来删除就方便很多了删除所有的表:如果由于外键约束删除table失败,则先删除所有约束:--/第1步**********删除所有外键约束**...
  • 1、对于第一种重复,比较容易解决,使用 select distinct * from tableName 就可以得到无重复记录的结果集。 如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除 代码如下: select distinct * ...
  • 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的...就可以得到无重复记录的结果集。 如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除 复制
  • 最简单删除SQL Server中所有数据方法原文:最简单删除SQL Server中所有数据方法最简单删除SQL Server中所有数据方法 编写人:CC阿爸 2014-3-14 其实删除数据库中数据方法并不复杂,为什么我还要多此一举呢,...
  • SQL语句--清除数据表的所有记录

    千次阅读 2018-09-29 09:45:20
     还有一个排重的SQL解决方法 ALTER IGNORE TABLE dict ADD UNIQUE INDEX(content); 建一个索引。 Truncate Table Truncate是SQL中的一个删除数据表内容的语句,用法是:  语法  TRUNCATE...
  • SQL语句怎么删除表中的所有数据

    万次阅读 2019-10-30 14:43:34
    1、TRUNCATE TABLE 删除表中的所有行,而不记录单个行删除操作。 语法 TRUNCATE TABLEname 参数 name 是要截断名称或要删除其全部行名称。 2、Delete from tablename where 1=1 ...
  • SQL是? Structure Query Language 提取数据? SELECT 更新数据? UPDATE 删除数据?...插入新数据?...如何从 “Persons” 表中选取 “FirstName” 列值以 “a” 开头的所有记录? SELECT *.
  • -----此处不用truncate是因为truncate必须得删除外键,如果不考虑外键话最好用truncate ----禁用当前数据库中所有约束、触发器 exec sp_msforeachtable 'ALTER TABLE ? DISABLE TRIGGER all' exec sp...
  • SQL语句删除表中所有数据

    千次阅读 2010-08-06 12:22:00
    TRUNCATE TABLE 删除表中的所有行,而不记录单个行删除操作。 语法 TRUNCATE TABLE name 参数 name 是要截断名称或要删除其全部行名称。 注释 TRUNCATE TABLE 在功能上与不带 WHERE 子句 ...
  • SQL删除语句概述

    千次阅读 2018-12-18 16:36:26
    关于SQL Delete的这篇文章是关于SQL Server中关键语句,函数和操作的SQL必备系列的一部分。 要从表中删除行,请使用delete关键字通过数据操作语言(即DML语句)完成。到目前为止,SQL删除操作是所有DML命令中最简单...
  • SQL语句的基础语法

    2019-12-13 17:05:29
    mysql基础语法数据库简介什么是数据库数据库优点SQL概念什么是SQLSQL语句的分类DDL语句DDL操作数据库DDL操作表DML语句插入记录插入全部字段插入部分数据蠕虫复制更新表记录删除记录DQL语句简单查询查询表...
  •  2)删除所有数据,并回归初始化标识字段。  Truncate table 表名  3)delete与truncate区别  a. truncate是能使种子回到初始值  b. truncate不能加条件  c. truncate不能涉及触发器  d. truncate性能要比...
  • 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段...就可以得到无重复记录的结果集。 如果该表需要删除重复的记录(重复记录保留1条),可以按...
  • 表:CREATE TABLE Company_Info(id smallint IDENTITY(1,1) ,username varchar(50) null,password varchar(50) null,PRIMARY KEY(id))思路------------显示哪些人相同,相同数量是多少?select convert(int,SQRT...
  • --有一个表,假设是这样的 CREATE TABLE Test ( field1 number(7) primary key, ... 要删除表中所有field1重复的记录,可以用下面的SQL语句: -------------------------------------------------------...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 867
精华内容 346
关键字:

删除所有记录的sql语句是