1.查詢重復(fù)記錄
select 字段 from 表? group by 字段 having count(字段)>1;
2.只顯示重復(fù)記錄中的一條ID值最小或最大的記錄
select * from 表 where 字段 in (select 字段 FROM 表 group by 字段
having count(字段 )>1 );
上面sql語句把字段重復(fù)的的所有值全部顯示出,那么我們?nèi)绾沃伙@示一條id最小或最大的記錄呢屎蜓?
關(guān)鍵是在上面sql的where子句中select 語句
修改為
select min(id) from 數(shù)據(jù)表 group by 字段 having count(字段)>1
查詢重復(fù)記錄字段中ID最小值:
select? * from? 數(shù)據(jù)表 where 字段 in? (select min(id) from 數(shù)據(jù)表 group by 字段 having count(字段)>1 );
查詢重復(fù)記錄字段中ID最大值:
select? * from? 數(shù)據(jù)表 where 字(select min(id) form 數(shù)據(jù)表 group by 字段? having count(重復(fù)記錄字段)>1 );
3.對(duì)重復(fù)記錄執(zhí)行delete update
例如只保留最小id的一條
delete 數(shù)據(jù)表 where id not in?
(
select 表別名.字段別名 from
?(select min(id) 字段別名? from 數(shù)據(jù)表 group by 字段 having count(字段)>1) as 表別名
);
4.group by? 字段 having count與distinct的區(qū)別
distinct只是將重復(fù)的行從結(jié)果中出去炬转;
group?by是按指定的列分組算灸,一般這時(shí)在select中會(huì)用到聚合函數(shù)。
distinct是把不同的記錄顯示出來乎婿。
group?by是在查詢時(shí)先把紀(jì)錄按照類別分出來再查詢。
group?by?必須在查詢結(jié)果中包含一個(gè)聚集函數(shù)沐旨,而distinct不用。
總結(jié):
對(duì)于重復(fù)記錄關(guān)鍵是查出 :采用group by 字段 having count(字段)>1
取得最小id的一條(很關(guān)鍵) :采用min(id)