MySQL 刪除重復數據
創新互聯公司長期為數千家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為廣信企業提供專業的成都做網站、成都網站制作,廣信網站改版等技術服務。擁有10年豐富建站經驗和眾多成功案例,為您定制開發。
有些 MySQL 數據表中可能存在重復的記錄,有些情況我們允許重復數據的存在,但有時候我們也需要刪除這些重復的數據。
本章節我們將為大家介紹如何防止數據表出現重復數據及如何刪除數據表中的重復數據。
刪除重復數據
如果你想刪除數據表中的重復數據,你可以使用以下的SQL語句:
from 樹懶學堂 - 一站式數據知識平臺
當然你也可以在數據表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡單的方法來刪除表中的重復記錄。方法如下:
mysql去重復 保留一條怎么操作呢?一起來看下吧:
1、查找表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷
SELECT ????* FROM ????people WHERE ????peopleId?IN?( ????????SELECT ????????????peopleId ????????FROM ????????????people ????????GROUP?BY ????????????peopleId ????????HAVING ????????????count(peopleId)??1 ????)
2、刪除表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷,只留有rowid最小的記錄
DELETE FROM ????people WHERE ????peopleName?IN?( ????????SELECT ????????????peopleName ????????FROM ????????????people ????????GROUP?BY ????????????peopleName ????????HAVING ????????????count(peopleName)??1 ????) AND?peopleId?NOT?IN?( ????SELECT ????????min(peopleId) ????FROM ????????people ????GROUP?BY ????????peopleName ????HAVING ????????count(peopleName)??1 )
3、查找表中多余的重復記錄(多個字段)
SELECT ????* FROM ????vitae?a WHERE ????(a.peopleId,?a.seq)?IN?( ????????SELECT ????????????peopleId, ????????????seq ????????FROM ????????????vitae ????????GROUP?BY ????????????peopleId, ????????????seq ????????HAVING ????????????count(*)??1 ????)
4、刪除表中多余的重復記錄(多個字段),只留有rowid最小的記錄
DELETE FROM ????vitae?a WHERE ????(a.peopleId,?a.seq)?IN?( ????????SELECT ????????????peopleId, ????????????seq ????????FROM ????????????vitae ????????GROUP?BY ????????????peopleId, ????????????seq ????????HAVING ????????????count(*)??1 ????) AND?rowid?NOT?IN?( ????SELECT ????????min(rowid) ????FROM ????????vitae ????GROUP?BY ????????peopleId, ????????seq ????HAVING ????????count(*)??1 )
5、查找表中多余的重復記錄(多個字段),不包含rowid最小的記錄
SELECT ????* FROM ????vitae?a WHERE ????(a.peopleId,?a.seq)?IN?( ????????SELECT ????????????peopleId, ????????????seq ????????FROM ????????????vitae ????????GROUP?BY ????????????peopleId, ????????????seq ????????HAVING ????????????count(*)??1 ????) AND?rowid?NOT?IN?( ????SELECT ????????min(rowid) ????FROM ????????vitae ????GROUP?BY ????????peopleId, ????????seq ????HAVING ????????count(*)??1 )
6、消除一個字段的左邊的第一位:
UPDATE?tableName SET?[?Title?]=?RIGHT?([?Title?],(len([?Title?])?-?1)) WHERE ????Title?LIKE?'村%'
7、消除一個字段的右邊的第一位:
UPDATE?tableName SET?[?Title?]=?LEFT?([?Title?],(len([?Title?])?-?1)) WHERE ????Title?LIKE?'%村'
8、假刪除表中多余的重復記錄(多個字段),不包含rowid最小的記錄
UPDATE?vitae SET?ispass?=-?1 WHERE ????peopleId?IN?( ????????SELECT ????????????peopleId ????????FROM ????????????vitae ????????GROUP?BY ????????????peopleId
一張user表 中的name字段,里面有10個張三。我要只查詢出一個張三。
SQL: select distinct name from user
如果還要查詢出id
SQL: select distinct name,id from user
SQL :select name from user group by name
group by理解:表里的某一個字段(比如:name) 當出現相同的數據時,group by就將這2條數據合二為一。name就顯示一條 數據了。 但是name達到合二為一了,這2條數據的其他數據怎么辦呢? 這時候需要配合聚合函數的使用。
where條件:分組前的條件,配合任何關鍵字使用
Having 條件:分組后的條件 (事后條件) ,只配合group by使用。having條件通常使用聚合函數
SQL :select deptno,sum(sal) from emp group by deptno having sum(sal) 9000;
SQL: select deptno,count(*) from emp where sal 1000 group by deptno haing sum(sal) 8000
拓展:
聚合函數定義:聚合函數對一組值進行計算并返回單一的值。(以下都屬于聚合函數)
count(*) : 不包括空值。返回對行數目的計數。計算出有多少行,多少條數據。
count() : 包含空值。返回對數目的計數。計算表里有多少行,相當于多少條數據。
sum() : 求和運算
max(); 最大值
min(): 最小值
avg(): 平均值
網頁題目:mysql怎么去重復內容 mysql如何去重
瀏覽地址:http://vcdvsql.cn/article22/dopidcc.html
成都網站建設公司_創新互聯,為您提供虛擬主機、網站排名、品牌網站設計、網站維護、、關鍵詞優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯