日常答疑|MySQL刪除重複數據踩過得坑

2021-02-19 統計與數據分析實戰
問題

群友提問:MySQL這樣刪除重複數據為啥不成功呢?

嚴小樣兒:安排!

咋一看,大家都說where子句裡面應該使用極值函數,加個max就對了,這麼簡單!
# 大家想像中這樣寫是對的,其實仍然是錯的!delete from p1     where id<(select max(id) from p1 b                   where p1.name=b.name);

看到這裡,很多經常寫sql但是又不太精通sql的人都會說:納尼??!尤其是經常使用Oracle的同學,更是百思不得其解!
MySQL這樣寫的確是錯的,Oracle這樣寫應該沒問題!接下來,我們來研究一番,到底如何以這樣的方式去重呢?!安排一、預覽數據

二、查重複值

SELECT * FROM t    WHERE t.ID < (SELECT MAX(m.ID)FROM t m                      WHERE m.NAME = t.NAME AND m.PRICE = t.PRICE);

(重複值結果)

也就是說,利用上面的SQL語句可以查詢到哪些是重複數據。

然而,在它前面加個delete卻不能刪除重複值!

DELETE FROM t     WHERE t.ID < (SELECT MAX(m.ID) FROM t m                       WHERE m.NAME=t.NAME AND m.PRICE = t.PRICE);

(報錯截圖)

三、正確答案
delete from t     where t.id in (select r.* from (select id from t                                       where t.id < (select max( m.id ) from t m                                                         where m.name = t.name                                                   )                                   ) r                  );                  SELECT * FROM t;

MySQL不能直接在查詢結果中進行刪除操作,需要先建立一個臨時表。更多精彩

祝福大家2020一夜暴富!

相關焦點

  • MySQL如何刪除重複數據
    MySQL中經常會遇到重複的數據,那麼當我們遇到重複的時候的時候,如果定位哪些數據是有重複的記錄?如何刪除重複的數據?我們該怎麼做呢?接下來我們一步步來分析一下遇到這樣的情況後,該如何處理。也就是我們的上面的這個表中每一組重複數據中id最小的一行數據需要保留,其他比較大的id的重複的數據行需要被刪除。當然如果是要保留id行最大的一行數據最為最後的數據行也是可以了,只要在查詢的時候,稍微修改一下SQL語句的min(id)或max(id)函數即可。
  • 如何實現 MySQL 刪除重複記錄並且只保留一條
    ,所以需要查詢出重複的試題,並且刪除掉重複的試題只保留其中1條,以保證考試的時候抽不到重複的題。查詢全部重複的數據: 這樣就查詢出了所有的重複數據(除了deptno最小的那行)。刪除表中多餘重複試題並且只留1條: a.
  • 面試官:在使用mysql資料庫時,遇到重複數據怎麼處理?
    前言前段時間,很多人問我能不能寫一些資料庫的文章,正好自己在測試mysql資料庫性能的時候,出現了一個問題,也就是出現了很多重複的數據,想起來自己long long ago寫過一篇類似的,僅此就拿來總結了一下。
  • mysql的這幾個坑你踩過沒?真是防不勝防
    但是,筆者遇到過的這些坑不知道你們都經歷過沒?二、有符號和無符號以前我們公司在項目開發之初制定開發規範時,對mysql的int類型欄位定義成有符號,還是無符號問題專門討論過。觀點一:對於能夠確定裡面存的值一定是正數的欄位,定義成UNSIGNED無符號的,可以節省一半的存儲空間。
  • Mysql數據誤刪除快速回滾
    傳統的方法會先恢復mysql備份,再去用mysqlbinlog抽取指定時間點的日誌,再恢復,這樣的操作比較耗時,容易出錯,那有沒有一種工具可以快速把誤刪除的操作SQL逆過來,然後重新插入誤刪除的數據呢?
  • MySQL 進行 Replace 操作時造成數據丟失——那些坑你踩了嗎?
    replace into 語句,由於使用不當導致了數據的大量丟失,到底是如何導致的數據丟失?如果新插入行的主鍵或唯一鍵在表中已經存在,則會刪除原有記錄並插入新行;如果在表中不存在,則直接插入地址:https://dev.mysql.com/doc/refman/5.6/en/replace.htmlb.
  • mysql資料庫,如何處理重複的數據?
    其實解決能否插入重複數據的問題,一般情況下是有兩個思路,就像治水一樣,第一個就是從源頭,第二個就是在水流經的路上。我們帶著這兩種思路繼續往下看:問題 在我們的mysql資料庫中,經常會出現一些重複的數據,有些情況我們允許重複數據的存在,但有時候我們也需要刪除這些重複的數據。我們如何去處理呢?
  • 【用binlog日誌】恢復 MySQL 資料庫刪除數據
    在數據丟失的緊急情況下,可以嘗試用binlog日誌功能進行數據恢復操作。正是由於binlog日誌以上的特性,在實際的案件取證中也可以通過binlog日誌來恢復刪除數據。要通過binlog日誌恢復mysql資料庫刪除數據的前提:binlog日誌確定是開啟的。
  • 使用mysql資料庫,遇到重複數據怎麼處理?
    其實解決能否插入重複數據的問題,一般情況下是有兩個思路,就像治水一樣,第一個就是從源頭,第二個就是在水流經的路上。我們帶著這兩種思路繼續往下看:問題 在我們的mysql資料庫中,經常會出現一些重複的數據,有些情況我們允許重複數據的存在,但有時候我們也需要刪除這些重複的數據。我們如何去處理呢?
  • Java日常開發的21個坑,你踩過幾個?
    日期YYYY格式設置的坑日常開發,經常需要對日期格式化,但是呢,年份設置為YYYY大寫的時候,是有坑的哦。ThreadLocal中的數據,確保數據不串        currentUser.remove();    }}8.
  • Mysql分區(PARTITION)實戰--解決Mysql大量刪除數據效率低的問題
    有一個表netmon_history , 表結構如下:每五分鐘要做一次數據更新,要插入約50萬條數據,完成這50萬條數據的插入大概需要3分鐘。由於數據的插入,表會越來越大。但是應用只需要保留1個小時內的數據,時間戳超過一個小時的數據要刪除掉。剛開始的時候採用一條一條刪除的方法,每5分鐘刪除一次,每次清除一個小時前的數據。但是遇到一個問題是,經常返回錯誤「Lock wait timeout exceeded; try restarting transaction」。發現mysql的netmon_history這張表被鎖定了。
  • 如何實現 MySQL 刪除重複記錄並且只保留一條?
    最近在做題庫系統,由於在題庫中添加了重複的試題,所以需要查詢出重複的試題,並且刪除掉重複的試題只保留其中1條,以保證考試的時候抽不到重複的題。查詢全部重複的數據:mysql不支持這種更新查詢同一張表的操作解決辦法:把要更新的幾列數據查詢出來做為一個第三方表,然後篩選更新。
  • 京東筆試題:如何實現 MySQL 刪除重複記錄並且只保留一條?
    正文如下:最近,在做題庫系統,由於在題庫中添加了重複的試題,所以需要查詢出重複的試題,並且刪除掉重複的試題只保留其中1條,以保證考試的時候抽不到重複的題。mysql不支持這種更新查詢同一張表的操作解決辦法:把要更新的幾列數據查詢出來做為一個第三方表,然後篩選更新。3. 查詢表中多餘重複試題(根據depno來判斷,除了rowid最小的一個)a. 第一種方法
  • MySQL語句中去除重複語句
    刪除資料庫中重複的記錄,只保留一條
  • MySQL mysqldump 數據導出詳解
    (點擊上方藍字,可快速關注我們)來源:pursuer.chen連結:http://www.cnblogs.com/chenmh/p/5300370.html介紹在日常維護工作當中經常會需要對數據進行導出操作
  • 幾個常見而嚴重的 MySQL 問題分析 | 運維進階
    【摘要】踩坑不可怕,可怕的是重複踩坑,避免它是一位程式設計師的基本修養。
  • MySQL數據量太大,日常卡死!想跑路了!
    原開發人員都已離職,到我來維護,這就是傳說中的維護不了就跑路,然後我就是掉坑的那個!!!我嘗試解決該問題,so,有個這個日誌。分區的好處是:1.可以讓單表存儲更多的數據2.分區表的數據更容易維護,可以通過清楚整個分區批量刪除大量數據
  • MYSQL資料庫操作案例
    MySQL中刪除數據表是非常容易操作的, 但是你再進行刪除表操作時要非常小心,因為執行刪除命令後所有數據都會消失。多個 SELECT 語句會刪除重複的數據。mytable;MySQL 處理重複數據有些 MySQL 數據表中可能存在重複的記錄,有些情況我們允許重複數據的存在,但有時候我們也需要刪除這些重複的數據。
  • Oracle資料庫刪除重複數據的情況!
    【IT168 論壇採風】在對資料庫進行操作過程中我們可能會遇到這種情況,表中的數據可能重複出現,使我們對資料庫的操作過程中帶來很多的不便,那麼怎麼刪除這些重複沒有用的數據呢?
  • 完美組合:NetApp重複數據刪除和VMware
    VMware 已成為我們見過的用於 NetApp 重複數據刪除的最受歡迎的使用案例。與 Data ONTAP®7.2.2 一起發布重複數據刪除之後不久,客戶就開始報告在傳統的 VI3 環境和新興的 VDI 環境中對 VMware 虛擬機 (VM) 進行重複數據刪除都獲得了極大成功。自然地,我們想要詳細地了解並研究他們為何如此興奮。