學習sql有一段時間了,發現在我建了一個用來測試的表(沒有建索引)中出現了許多的重復記錄。後來總結了一些刪除重復記錄的方法,在Oracle中,可以通過唯一rowid實現刪除重復記錄;還可以建臨時表來實現...這個只提到其中的幾種簡單實用的方法,希望可以和大家分享(以表employee為例)。
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_NAMESALARY
---------- ---------------------------------------- ----------
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