把excel中的数据导入到数据库中如何过滤掉相同的记录?比如把excel中教职工的职称导入数据库中,要求不存在相同的记录

解决方案 »

  1.   

    SQL语言如何把相同记录过滤。你就怎么写。
      

  2.   

    把EXCLE按关键字排序,倒入数据库的时候只需判断当前记录是否跟上一个记录重复,然后决定是否倒入
      

  3.   

    先把數據導入到數據庫中, 再利用SQL刪除相同的記錄.删除的几种方法: 
     
    (1)通过建立临时表来实现 SQL>create table temp_emp as (select distinct * from employee)  SQL> truncate table employee; (清空employee表的数据) SQL> insert into employee select * from temp_emp;  (再将临时表里的内容插回来) 
     
    ( 2)通过唯一rowid实现删除重复记录.在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大或最小rowid的就可以了,其余全部删除。 SQL>delete from employee e2 where rowid not in (
            select max(e1.rowid) from employee e1 where         e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and e1.salary=e2.salary);--这里用min(rowid)也可以。 
     
    SQL>delete from employee e2 where rowid <(
            select max(e1.rowid) from employee e1 where 
            e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and                   e1.salary=e2.salary); 
     
    (3)也是通过rowid,但效率更高。 SQL>delete from employee where rowid not in (
            select max(t1.rowid) from employee t1 group by          t1.emp_id,t1.emp_name,t1.salary);--这里用min(rowid)也可以。  
        EMP_ID EMP_NAME                                     SALARY ---------- ---------------------------------------- ----------          1 sunshine                                      10000          3 xyz                                             30000          2 semon                                         20000 
     
      
     
    SQL> desc employee  Name                                      Null?    Type
     ----------------------------------------- -------- ------------------ emp_id                                                NUMBER(10)
    emp_name                                           VARCHAR2(20) salary                                                  NUMBER(10,2) 
      
    可以通过下面的语句查询重复的记录: SQL> select * from employee; 
     
        EMP_ID EMP_NAME                                  SALARY ---------- ---------------------------------------- ----------          1 sunshine                                      10000          1 sunshine                                      10000          2 semon                                         20000          2 semon                                         20000          3 xyz                                           30000          2 semon                                         20000 
     SQL> select distinct * from employee;     EMP_ID EMP_NAME                                     SALARY ---------- ---------------------------------------- ----------          1 sunshine                                      10000          2 semon                                         20000          3 xyz                                             30000 SQL>  select * from employee group by emp_id,emp_name,salary having count (*)>1     EMP_ID EMP_NAME                                     SALARY ---------- ---------------------------------------- ----------          1 sunshine                                      10000          2 semon                                          20000 
    SQL> select * from employee e1 where rowid in (select max(rowid) from employe e2 
     where e1.emp_id=e2.emp_id and   e1.emp_name=e2.emp_name and e1.salary=e2.salary); 
     
        EMP_ID EMP_NAME                                     SALARY ---------- ---------------------------------------- ----------          1 sunshine                                      10000          3 xyz                                             30000          2 semon                                         20000 
      
    2. 删除的几种方法: 
     
    (1)通过建立临时表来实现 SQL>create table temp_emp as (select distinct * from employee)  SQL> truncate table employee; (清空employee表的数据) SQL> insert into employee select * from temp_emp;  (再将临时表里的内容插回来) 
     
    ( 2)通过唯一rowid实现删除重复记录.在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大或最小rowid的就可以了,其余全部删除。 SQL>delete from employee e2 where rowid not in (
            select max(e1.rowid) from employee e1 where         e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and e1.salary=e2.salary);--这里用min(rowid)也可以。 
     
    SQL>delete from employee e2 where rowid <(
            select max(e1.rowid) from employee e1 where 
            e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and                   e1.salary=e2.salary); 
     
    (3)也是通过rowid,但效率更高。 SQL>delete from employee where rowid not in (
            select max(t1.rowid) from employee t1 group by          t1.emp_id,t1.emp_name,t1.salary);--这里用min(rowid)也可以。  
        EMP_ID EMP_NAME                                     SALARY ---------- ---------------------------------------- ----------          1 sunshine                                      10000          3 xyz                                             30000          2 semon                                         20000