這篇文章給大家介紹MySQL數(shù)據庫中怎么查找刪除重復行,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
10余年的豐鎮(zhèn)網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網營銷推廣的優(yōu)勢是能夠根據用戶設備顯示端的尺寸不同,自動調整豐鎮(zhèn)建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“豐鎮(zhèn)網站設計”,“豐鎮(zhèn)網站推廣”以來,每個客戶項目都認真落實執(zhí)行。
當你對b字段排序(分組),相同值的c被分到不同的組,因此不能用COUNT(DISTINCT c)來計算大小。COUNT()之類的內部函數(shù)只作用于同一個分組,對于不同分組的行就無能為力了。類似,如果排序的是c字段,相同值的b也會分到不同的組,無論如何是不能達到我們的目的的。
幾種正確的方法
也許最簡單的方法是分別對某個字段查找重復行,然后用UNION拼在一起,像這樣:
select b as value, count(*) as cnt, 'b' as what_col from a_b_c group by b having count(*) > 1 union select c as value, count(*) as cnt, 'c' as what_col from a_b_c group by c having count(*) > 1; +-------+-----+----------+ | value | cnt | what_col | +-------+-----+----------+ | 1 | 3 | b | | 2 | 3 | b | | 3 | 3 | b | | 1 | 3 | c | | 2 | 3 | c | | 3 | 3 | c | +-------+-----+----------+
輸出what_col字段為了提示重復的是哪個字段。另一個辦法是使用嵌套查詢:
select a, b, c from a_b_c where b in (select b from a_b_c group by b having count(*) > 1) or c in (select c from a_b_c group by c having count(*) > 1); +----+------+------+ | a | b | c | +----+------+------+ | 7 | 1 | 1 | | 8 | 1 | 2 | | 9 | 1 | 3 | | 10 | 2 | 1 | | 11 | 2 | 2 | | 12 | 2 | 3 | | 13 | 3 | 1 | | 14 | 3 | 2 | | 15 | 3 | 3 | +----+------+------+
這種方法的效率要比使用UNION低許多,并且顯示每一重復的行,而不是重復的字段值。還有一種方法,將自己跟group的嵌套查詢結果聯(lián)表查詢。寫法比較復雜,但對于復雜的數(shù)據或者對效率有較高要求的情況,是很有必要的。
select a, a_b_c.b, a_b_c.c from a_b_c left outer join ( select b from a_b_c group by b having count(*) > 1 ) as b on a_b_c.b = b.b left outer join ( select c from a_b_c group by c having count(*) > 1 ) as c on a_b_c.c = c.c where b.b is not null or c.c is not null
關于MySQL數(shù)據庫中怎么查找刪除重復行就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。