中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL怎么刪除重復數據

發布時間:2022-09-20 17:37:00 來源:億速云 閱讀:281 作者:iii 欄目:開發技術

這篇文章主要介紹“SQL怎么刪除重復數據”,在日常操作中,相信很多人在SQL怎么刪除重復數據問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SQL怎么刪除重復數據”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    1 SQL去重

    SQL中去除完全相同數據可以用distinct關鍵字,任意字段去重可以用group by,以下面的數據表為例。

    2 distinct

    存在兩條完全相同的紀錄,用關鍵字distinct就可以去掉

    根據單個字段去重,能精確去重;

    作用在多個字段時,只有當這幾個字段的完全相同時,才能去重;

    關鍵字distinct只能放在SQL語句中的第一個,才會起作用

    SQL怎么刪除重復數據

    SQL怎么刪除重復數據

    SQL怎么刪除重復數據

    一般用來返回不重復的記錄條數,返回不重復的條數(去掉test重復的,就剩下6條)

    SQL怎么刪除重復數據

    3 group by

    1. 查詢根據名字去重后數據(名字相同取id值大的)

    SELECT * FROM stu WHERE id IN (SELECT MAX(id) FROM stu GROUP BY `name`)

    SQL怎么刪除重復數據

    2. 刪除名字相同數據(名字相同保留id值大的)

    group by + count + max去掉重復數據

    1)SELECT * FROM stu

    SQL怎么刪除重復數據

    2)加上group by 后,會將重復的數據去掉了

    SQL怎么刪除重復數據

    3) 條件(名字)是數量大于1的重復數據

    SELECT `name` FROM stu GROUP BY `name` HAVING COUNT(`name`) > 1
    
    #條件是數量大于1的重復數據
    SELECT * FROM stu WHERE `name` IN(
    SELECT `name` FROM stu GROUP BY `name` HAVING COUNT(`name`)>1 
    )

    SQL怎么刪除重復數據

    4)查看某字段重復數據的id

    SELECT id, COUNT(*) FROM stu 
    GROUP BY NAME DESC HAVING(COUNT(*) > 0)

    SQL怎么刪除重復數據

    5)查詢所有重復數據

    SELECT * FROM stu WHERE NAME IN (SELECT `name` FROM stu GROUP BY `name` HAVING COUNT(`name`) > 1)

    SQL怎么刪除重復數據

    5) 去重

    可以使用distinct去重(返回不重復的用戶名)

    刪除多余的重復記錄(name),只保留id最大的記錄。

    DELETE FROM stu 
    WHERE id NOT IN ( SELECT a.id FROM ( SELECT MAX( id ) AS id FROM stu GROUP BY `name` )a )

    或者

     DELETE FROM stu WHERE `name` IN (SELECT `name` FROM (SELECT `name` FROM stu GROUP BY `name` HAVING COUNT(`name`)>1) e)
     AND id NOT IN (SELECT id FROM (SELECT MAX(id) AS id FROM stu GROUP BY `name` HAVING COUNT(`name`)>1) t)
     #查詢顯示重復的數據都是顯示最前面的幾條,因此不需要查詢是否最小值

    錯誤刪除

    DELETE FROM stu WHERE name IN (SELECT name FROM stu GROUP BY name HAVING COUNT(name)>1)
    AND id NOT IN (SELECT MAX(id) FROM stu GROUP BY stu HAVING COUNT(name)>1)

    原因是:不能將直接查處來的數據當做刪除數據的條件,我們應該先把查出來的數據新建一個臨時表,然后再把臨時表作為條件進行刪除功能

    4 總結

    去重后名字記錄

    SELECT `name` FROM stu 
    GROUP BY NAME HAVING(COUNT(*) > 0)

    2)

    所有重復名字的記錄

    SELECT `name` FROM stu 
    GROUP BY NAME HAVING COUNT(*) > 1

    3)把所有重復的記錄都刪了

    DELETE FROM stu WHERE name IN
    (SELECT name FROM stu GROUP BY name HAVING COUNT(*)>1)

    SQL怎么刪除重復數據

    無法在刪除時同時查詢這張表,這個問題只在MySQL中出現,oracle沒有。怎么解決?我們只需要在查出結果以后加一張中間表。讓執行器認為我們要查的數據不是來自正在刪的這張表就可以了。

    DELETE FROM stu WHERE `name` IN 
        (SELECT a.name FROM 
            (SELECT `name` FROM stu GROUP BY `name` HAVING COUNT(*)>1) a)

    所有重復數據都刪除, 就剩王五一條數據了

    SQL怎么刪除重復數據

    4) 現在刪除所有重復數據數據做完了,考慮怎么保留重復數據中id最小的。只需要在刪除時讓刪除該條的記錄id不在重復數據id最小的當中就可以了。

    DELETE FROM stu WHERE `name` IN 
        (SELECT a.name FROM 
            (SELECT `name` FROM stu GROUP BY `name` HAVING COUNT(*)>1) a)
         AND id NOT IN 
        (SELECT b.id FROM 
            (SELECT MIN(id) id FROM stu 
                GROUP BY `name` HAVING COUNT(*)>1) b);

    SQL怎么刪除重復數據

    還有簡單辦法 算出去重后所有數據(保留最小ID),然后刪除id不在該數組里的

     DELETE FROM stu WHERE id NOT IN (SELECT t.id FROM (SELECT MIN(id) AS id FROM stu GROUP BY `name`)t)

    到此,關于“SQL怎么刪除重復數據”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    sql
    AI

    无为县| 安义县| 张家港市| 眉山市| 莱西市| 金湖县| 漳浦县| 山西省| 满城县| 长白| 邵武市| 龙胜| 济阳县| 西丰县| 丰原市| 抚州市| 阳泉市| 航空| 龙州县| 赣榆县| 龙游县| 池州市| 灯塔市| 富顺县| 广丰县| 锦州市| 长武县| 涞水县| 达孜县| 昌乐县| 富宁县| 胶南市| 宁都县| 乐亭县| 云龙县| 龙岩市| 阿坝县| 潮安县| 满洲里市| 南川市| 墨竹工卡县|