我們可能會出現這種情況
重復的數據可能有這樣兩種情況
一
先來談談如何查詢重復的數據吧
下面語句可以查詢出那些數據是重復的
select 字段
將上面的>號改為=號就可以查詢出沒有重復的數據了
想要刪除這些重復的數據
delete from 表名 a where 字段
(select 字段
上面的語句非常簡單
CREATE TABLE 臨時表 AS
(select 字段
上面這句話就是建立了臨時表
下面就可以進行這樣的刪除操作了
delete from 表名 a where 字段
這種先建臨時表再進行刪除的操作要比直接用一條語句進行刪除要高效得多
這個時候
在oracle中
我們就可以利用這個字段
下面是查詢重復數據的一個例子
select a
where a
(
select max(b
where a
a
)
下面我就來講解一下
而外面就是查詢出除了rowid最大之外的其他重復的數據了
由此
delete from 表名 a
where a
(
select max(b
where a
a
)
隨便說一下
create table 臨時表 as
select a
delete from 表名 a
where a
(
select b
where a
a
);
commit;
二
對於表中兩行記錄完全一樣的情況
select distinct * from 表名
可以將查詢的記錄放到臨時表中
CREATE TABLE 臨時表 AS (select distinct * from 表名);
drop table 正式表;
insert into 正式表 (select * from 臨時表);
drop table 臨時表;
如果想刪除一個表的重復數據
臨時表將數據導入正式表中
INSERT INTO t_table_bak
select distinct * from t_table;
From:http://tw.wingwit.com/Article/program/Oracle/201311/17477.html