国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql中distinct和group by過濾刪除重復行

2024-07-24 12:38:05
字體:
來源:轉載
供稿:網友

在mysql中distinct就是可以直接去重的而group by 是分組顯示的,但是有朋友在應用中可能會發現distinct并不像官方講得那有實用了,下面我來介紹一下它們是怎么過濾刪除重復行.

下面先來看看例子,代碼如下:

  1. table 
  2. id name 
  3. 1 a 
  4. 2 b 
  5. 3 c 
  6. 4 c 
  7. 5 b 

庫結構大概這樣,這只是一個簡單的例子,實際情況會復雜得多,比如我想用一條語句查詢得到name不重復的所有數據,那就必須使用distinct去掉多余的重復記錄,代碼如下:

select distinct name from table

得到的結果是:

  1. name 

好像達到效果了,可是,我想要得到的是id值呢?改一下查詢語句吧:

select distinct name, id from table

結果會是:

  1. id name 
  2. 1 a 
  3. 2 b 
  4. 3 c 
  5. 4 c 
  6. 5 b 

distinct怎么沒起作用?作用是起了的,不過他同時作用了兩個字段,也就是必須得id與name都相同的才會被排除.

我們再改改查詢語句:select id, distinct name from table

現在將完整語句放出:

select *, count(distinct name) from table group by name

結果:

  1. id name count(distinct name) 
  2. 1 a 1 
  3. 2 b 1 
  4. 3 c 1 

上面簡單但有些地方是不能完成我們的需要的,下面記錄了些常用的重復記錄操作語句

查詢及刪除重復記錄的方法.

1、查找表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷,代碼如下:

  1. select * from people 
  2. where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 

2、刪除表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷,只留有rowid最小的記錄,代碼如下:

  1. delete from people 
  2. where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 
  3. and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1) 

3、查找表中多余的重復記錄,多個字段,代碼如下:

  1. select * from vitae a 
  2. where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 

4、刪除表中多余的重復記錄,多個字段,只留有rowid最小的記錄,代碼如下:

  1. delete from vitae a 
  2. where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 
  3. and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) 

5、查找表中多余的重復記錄,多個字段,不包含rowid最小的記錄,代碼如下:

  1. select * from vitae a 
  2. where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 
  3. and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)  --Vevb.com

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 华安县| 金乡县| 新郑市| 绥宁县| 桐梓县| 广饶县| 昌吉市| 肇州县| 娄底市| 湘潭市| 横峰县| 高唐县| 枣庄市| 龙海市| 敦化市| 天水市| 昭平县| 合川市| 泗水县| 志丹县| 集安市| 全椒县| 普宁市| 盈江县| 梁平县| 罗源县| 仙居县| 大庆市| 沿河| 乐都县| 和田市| 安阳市| 丰镇市| 黄平县| 辽源市| 桐庐县| 瓦房店市| 肃宁县| 武强县| 沽源县| 永川市|