你這個不是對列去重。你這個是行數(shù)據(jù)。
成都創(chuàng)新互聯(lián)公司服務項目包括拉薩網站建設、拉薩網站制作、拉薩網頁制作以及拉薩網絡營銷策劃等。多年來,我們專注于互聯(lián)網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網行業(yè)的解決方案,拉薩網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到拉薩省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
對列的去重在查詢語句加distinct,例如 select distinct XXX from tablename
或者載查詢語句后面加group by
select distinct clom_name from table_name --利用distinct對列clom_name去重
select clom_name from table_name a
where rowid =(select max(b.rowid) from table_name b where a.clom_name=b.clom_name);
--利用rowid唯一標識的特性對列clom_name 去重
1。用rowid方法
據(jù)據(jù)oracle帶的rowid屬性,進行判斷,是否存在重復,語句如下:
查數(shù)據(jù):
select * from table1 a where rowid
!=(select max(rowid)
from table1 b where a.name1=b.name1 and
a.name2=b.name2......)
刪數(shù)據(jù):
delete from table1 a where rowid
!=(select max(rowid)
from table1 b where a.name1=b.name1 and
a.name2=b.name2......)
2.group by方法
查數(shù)據(jù):
select count(num), max(name) from student --列出重復的記錄數(shù),并列出他的name屬性
group by num
having count(num) 1 --按num分組后找出表中num列重復,即出現(xiàn)次數(shù)大于一次
刪數(shù)據(jù):
delete from student
group by num
having count(num) 1
這樣的話就把所有重復的都刪除了。
3.用distinct方法 -對于小的表比較有用
create table table_new as select distinct *
from table1 minux
truncate table table1;
insert into table1 select * from table_new;
select col1,col2,count(*)
from tab_1
group by col1,col2
having count(*) 1;
查出來重復數(shù)據(jù)了
然后
delete tab_1 a where rowid in (
select max(rowid) from tab_1 b
where a.col1=b.col1
and a.col2=b.col2
);
OK,搞定!
記住了,刪除之前一定要先備份,在查詢是不是要刪除的數(shù)據(jù),然后再刪除。
可用如下方法來進行刪除重復的數(shù)據(jù)。
如test表中有如下數(shù)據(jù):
要將name重復的刪除,保留其中一條數(shù)據(jù),可用如下語句:
delete?from?test?where?age?not?in?(select?min(age)?from?test?group?by?name);
commit;
執(zhí)行后結果: