当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

 ·moto 388 的问题速度慢    »显示摘要«
    摘要: 赛车游戏,移植到388,放大图片后,速度巨满。 那位高手给看看,高分酬谢! ......
    摘要: 偶编写的对话框程序响应wm_char消息,使用onchar函数, 可以正常地响应处理字符键,可是无法响应回车、fx等键,按下后没有反应, 使用判断是(nchar==13),也用过(nchar==vk_return),应该没错吧, 哪位大虾指导一下,谢谢了。 ......


如何删除重复的记录

比如说我有个表table1,里面有id,name,sex   ....  
  id唯一,现在数据里有重复的,就是id不一样,但name,sex什么的都一样,现在我要把那些多余的记录删除掉,请问sql语句怎么写啊?

NO.1   作者: yoki

删除重复数据  
   
  一、具有主键的情况  
  a.具有唯一性的字段id(为唯一主键)  
  delect   table    
  where   id   not   in    
  (  
  select   max(id)   from   table   group   by   col1,col2,col3...  
  )  
  group   by   子句后跟的字段就是你用来判断重复的条件,如只有col1,  
  那么只要col1字段内容相同即表示记录相同。  
   
  b.具有联合主键  
  假设col1+,+col2+,...col5   为联合主键  
  select   *   from     table   where   col1+,+col2+,...col5   in   (  
      select   max(col1+,+col2+,...col5)   from   table    
  where   having   count(*)>1  
  group   by   col1,col2,col3,col4    
  )  
  group   by   子句后跟的字段就是你用来判断重复的条件,  
  如只有col1,那么只要col1字段内容相同即表示记录相同。  
   
  c:判断所有的字段  
      select   *   into   #aa   from   table   group   by   id1,id2,....  
      delete   table    
      insert   into   table    
      select   *   from   #aa  
   
  二、没有主键的情况  
   
  a:用临时表实现  
  select   identity(int,1,1)   as   id,*   into   #temp   from   ta  
  delect   #temp    
  where   id   not   in    
  (  
      select   max(id)   from   #   group   by   col1,col2,col3...  
  )  
  delete   table   ta  
  inset   into   ta(...)  
        select   .....   from   #temp  
   
  b:用改变表结构来实现  
  alter   table   表   add     newfield   int   identity(1,1)  
  delete   表  
  where   newfield   not   in  
  (  
  select   min(newfield)   from   表   group   by   除newfield外的所有字段  
  )  
   
  alter   table   表   drop   column   newfield  
   
   
   
   
   
 

NO.2   作者: CrazyFor

如果有ID字段,就是具有唯一性的字段  
   
  delect   table   where   id   not   in   (  
   
      select   max(id)   from   table   group   by   col1,col2,col3...  
  )  
  group   by   子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。  
   
   
   
  2,如果是判断所有字段也可以这样  
      select   *   into   #aa   from   table   group   by   id1,id2,....  
      delete   table    
      insert   into   table    
      select   *   from   #aa  
   
   
   
  3,没有ID的情况  
   
  select   identity(int,1,1)   as   id,*   into   #temp   from   tabel  
  delect   #   where   id   not   in   (  
      select   max(id)   from   #   group   by   col1,col2,col3...)  
  delect   table  
  inset   into   table(...)  
        select   .....   from   #temp  
   
   
  col1+,+col2+,...col5   联合主键  
   
   
  select   *   from     table   where   col1+,+col2+,...col5   in   (  
   
      select   max(col1+,+col2+,...col5)   from   table    
  where   having   count(*)>1  
  group   by   col1,col2,col3,col4    
  )  
  group   by   子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。  
   
  2,  
  select   identity(int,1,1)   as   id,*   into   #temp   from   tabel  
  select   *   from     #temp   where   id   in   (  
      select   max(id)   from   #emp   where   having   count(*)>1   group   by   col1,col2,col3...)  
 

NO.3   作者: jimzj

创建一个临时表,把不同的记录放进去,删除原来的表的内容,再把临时表内容放回去就可以了  
  --这里只列出两个字段,还有其它的字段可以再添  
  select   distinct   name,   sex   into   #temptable   from   table1    
  truncate   table   table1  
  select   *   from   #temptable  
  insert   into   table1   select   *   from   #temptable  
  drop   table   #temptable  
   
   
   
   
 

NO.4   作者: happydreamer

 
  联合主键  
   
  or  
   
  select   *   from   table     where   exists   (select   1   from   table   x   where   table.col1   =   x.col1   and   table.col2=   x.col2   group   by   x.col1,x.col2   having   count(*)   >1)  
 


    摘要: 如题,jdk1.3.1或jdk1.4 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE