zoukankan      html  css  js  c++  java
  • mysql,oracle里删除重复记录,只保留一条(除了自增长字段,其他的字段完全相同为相同记录)

    //mysql脚本
    create table deletetest(
    id bigint primary key auto_increment,
    name varchar(12) not null,
    age int 
    );
    insert into deletetest(name,age) values ('admin',20);

    insert into deletetest(name,age) values ('centre',19);

    insert into deletetest(name,age) select name,age from deletetest;
    --------------------------------------------------------------------------------------------------------------
    select distinct name,age from deletetest;//select id from deletetest group by name,age having count(name)>1;

    select id from deletetest where id not in (select id from deletetest group by name,age having count(name)>1);
    --------------------------------------------------------------------------------------------------------------
    //delete操作
    delete from deletetest where id =6;
    --在mysql中不能指定一个语句来更新数据库中的数据
    delete deletetest from deletetest where id in (select id from deletetest group by name,age having count(name)>1);在

    mysql中是错误的
    --在mysql用自连接,能够解决
    delete m1 from deletetest as m1,deletetest as m2 where m1.name=m2.name and m1.age=m2.age and m1.id>m2.id;

    //oracle脚本

    --建表
    create table deletetest(
    myid number(10) primary key,
    myname varchar2(12) not null,
    age integer check (age between 1 and 100)
    );

    --建序列

    -- Create sequence 
    create sequence deletetest_se
    minvalue 1
    maxvalue 9999999999
    start with 1
    increment by 1
    cache 50
    order;

    --建自动更新的触发器 
    create or replace trigger delete_handle_tri
      before insert on deletetest  
      for each row  WHEN (new.myid is null) 
    declare
      -- local variables here
      nexthandle number;
    begin
      select deletetest_se.nextval into :new.myid from dual; 
     
    --end ;
    end delete_handle_tri;

    --插入数据
    insert into deletetest(myname,age) values('admin','19');
    insert into deletetest(myname ,age) values('centre','20');

    insert into deletetest(myname ,age) select myname,age from deletetest;


    select distinct myname,age from deletetest;

    select myname from (select distinct myname,age from deletetest group by myname,age having count(myname)>1);
    //删除重复记录(只有自增长的字段不算入),只保留一条
    begin
    for r in (select myname,age,max(rowid) rowid_temp  from deletetest
    group by  myname,age having count(myname)>1) loop
    delete from deletetest where myname=r.myname 
    and age=r.age and rowid <> r.rowid_temp ;
    commit;
    end loop;
    end;
    end;

  • 相关阅读:
    Javascript面向对象编程:非构造函数的继承
    JavaScript中this 详解
    构造函数与 new 命令
    JavaScript数组去重的6个方法
    初学Java Web(9)——学生管理系统(简易版)总结
    初学Java Web(8)——过滤器和监听器
    初学Java Web(7)——文件的上传和下载
    初学Java Web(6)——JSP学习总结
    初学Java Web(5)——cookie-session学习
    初学Java Web(4)——Servlet学习总结
  • 原文地址:https://www.cnblogs.com/mamo/p/3584211.html
Copyright © 2011-2022 走看看