最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中刪除重復(fù)數(shù)據(jù)SQL的三種寫法

 更新時間:2025年01月12日 11:49:54   作者:大夢誰先覺i  
這篇文章主要介紹了MySQL中刪除重復(fù)數(shù)據(jù)SQL的三種寫法,文中通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下

要在 MySQL 中刪除重復(fù)的數(shù)據(jù)并只保留一條,可以使用下面的方法(要用的時候直接復(fù)制小改下條件和表名稱即即可)

方法一:使用 left join + 子查詢刪除重復(fù)數(shù)據(jù)(推薦)

溫馨提示:本人在 500w 數(shù)據(jù)下執(zhí)行此 SQL 耗費 15s-30s 左右

使用 left join (推薦方法刪除重復(fù)數(shù)據(jù),添加唯一組合索引,可以使用,數(shù)據(jù)量大的也可以)

// 先把歷史數(shù)據(jù)刪除,才能夠添加唯一的組合索引
DELETE u1
FROM uf_cs_record_batch_detail u1
LEFT JOIN (
    SELECT MIN(id) AS min_id
    FROM uf_cs_record_batch_detail
    GROUP BY cs_contact_name, cs_safe_remark
) u2
ON u1.id = u2.min_id
WHERE u2.min_id IS NULL;

另外在附上添加唯一組合索引的 SQL 寫法(很實用):

// 添加組合的唯一索引
ALTER TABLE uf_cs_record_batch_detail ADD UNIQUE KEY idx_uni_contact_safe_stat (cs_contact_name, cs_safe_remark);

方法二:創(chuàng)建臨時表(需分多步執(zhí)行,邏輯清晰,但會改變ID值)

這種方法假設(shè)你有一個表 your_table,并且你要基于某些列來判斷哪些數(shù)據(jù)是重復(fù)的。
例如,如果你想刪除基于 column1 和 column2 的重復(fù)記錄,只保留一條記錄,你可以按照以下步驟操作:

  • 使用 CREATE TABLE 語句創(chuàng)建一個臨時表,用于存儲唯一的記錄。
  • 使用 INSERT INTO ... SELECT 語句將唯一的記錄插入到臨時表中。
  • 刪除原始表中的所有記錄。
  • 使用 INSERT INTO ... SELECT 語句將臨時表中的記錄插入回原始表。
  • 刪除臨時表。

以下是一個完整的 SQL 例子:

-- 創(chuàng)建臨時表 SQL 參考
CREATETABLE temp_table AS
SELECT*FROM your_table

-- 將不重復(fù)的數(shù)據(jù)臨時存在這個 temp_table 臨時表中
INSERTINTO temp_table
SELECT*FROM your_table t1
WHERE t1.id = (
    SELECTMIN(t2.id)
    FROM your_table t2
    WHERE t1.column1 = t2.column1
    AND t1.column2 = t2.column2
);

-- 然后將源表中的數(shù)據(jù)刪除
DELETEFROM your_table whereWHERE 字段1=值;

-- 再將臨時表中不重復(fù)數(shù)據(jù)重新寫回到源表中
INSERTINTO your_table
SELECT*FROM temp_table;

-- 最后刪除臨時表
DROPTABLE temp_table;

這樣,你就成功地刪除了原始表中的重復(fù)記錄,只保留了一條唯一記錄。

注意:但是這種方法會改變原來的數(shù)據(jù) ID ,所以這種方法看場合使用

方法三:使用 JOIN 自連查詢(需要注意性能問題)

為了避免改變原來的數(shù)據(jù) ID,我們可以使用一個不同的方法,通過使用自連接來標記重復(fù)的數(shù)據(jù)并刪除多余的記錄。這種方法在保留原始 ID 的情況下刪除重復(fù)記錄。

假設(shè)你的表結(jié)構(gòu)如下:

  • 表名:your_table
  • 列名:id (主鍵), column1column2, 以及其他列。

你可以使用以下 SQL 來刪除重復(fù)記錄,只保留一條(通常是保留 ID 最小的那一條):

-- Step 1: 標記要刪除的重復(fù)記錄
DELETE t1
FROM your_table t1
INNER JOIN your_table t2 
WHERE 
    t1.id > t2.id
    AND t1.column1 = t2.column1
    AND t1.column2 = t2.column2;

-- Step 2: 確認刪除成功,查看剩余數(shù)據(jù)
SELECT * FROM your_table;

解釋:

-標記要刪除的重復(fù)記錄:我們使用自連接 INNER JOIN 來找到重復(fù)的記錄,并且使用 WHERE t1.id > t2.id 來確保只刪除 id 較大的記錄,從而保 留 id 最小的記錄。

  • 確認刪除成功:通過 SELECT 語句查看剩余的數(shù)據(jù),確保刪除操作正確。這個方法的優(yōu)點是:不會改變原始數(shù)據(jù)的 ID。保留每組重復(fù)記錄中 ID 最小的一條記錄。操作簡單且高效。

小總結(jié)

  • 使用 left join 刪除重復(fù)數(shù)據(jù)(推薦使用),適合大數(shù)據(jù)量,性能 OK
  • 創(chuàng)建臨時表 適合需要重建數(shù)據(jù)表的場景,適合數(shù)據(jù)量中等的情況,不過比較繁瑣
  • 自連查詢 能保留最小 ID,適合不想改變 ID 的情況下刪除重復(fù)數(shù)據(jù)。

到此這篇關(guān)于MySQL中刪除重復(fù)數(shù)據(jù)SQL的三種寫法的文章就介紹到這了,更多相關(guān)MySQL刪除重復(fù)數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何用SQL命令查看Mysql數(shù)據(jù)庫大小

    如何用SQL命令查看Mysql數(shù)據(jù)庫大小

    本篇文章是對用SQL命令查看Mysql數(shù)據(jù)庫大小的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • windows系統(tǒng)中MySQL和SQLyog的安裝和配置教程

    windows系統(tǒng)中MySQL和SQLyog的安裝和配置教程

    這篇文章主要介紹了windows系統(tǒng)中MySQL和SQLyog的安裝和配置教程的相關(guān)資料,包括下載MySQL、解壓、設(shè)置環(huán)境變量、初始化數(shù)據(jù)庫、修改密碼等步驟,同時還介紹了如何下載和安裝SQLyog圖形化工具,以便更方便地管理和操作MySQL數(shù)據(jù)庫,需要的朋友可以參考下
    2025-11-11
  • 最新評論

    象山县| 韶关市| 哈密市| 陇川县| 鹤壁市| 永修县| 满洲里市| 陇南市| 防城港市| 宝鸡市| 许昌县| 乌拉特中旗| 莒南县| 兴山县| 青冈县| 阿拉善左旗| 凤阳县| 漳浦县| 九龙县| 会宁县| 河北区| 驻马店市| 共和县| 竹北市| 五常市| 西昌市| 湖南省| 阿鲁科尔沁旗| 定结县| 延庆县| 察哈| 永城市| 土默特左旗| 娄底市| 康平县| 清徐县| 华容县| 三台县| 怀柔区| 东台市| 九台市|