国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL怎樣刪除重復(fù)數(shù)據(jù),只保留一條?

這篇具有很好參考價值的文章主要介紹了MySQL怎樣刪除重復(fù)數(shù)據(jù),只保留一條?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在實際工作開發(fā)過程中,常常會遇到數(shù)據(jù)庫表中存在多條數(shù)據(jù)重復(fù)了,此時我們需要刪除重復(fù)數(shù)據(jù),只保留其中一條有效的數(shù)據(jù);

針對這種場景,我們用SQL語句該怎么實現(xiàn)呢?

數(shù)據(jù)準(zhǔn)備

建表語句:

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test`  (
  `id` int(11) NULL DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `test` VALUES (1, '張三');
INSERT INTO `test` VALUES (2, '李四');
INSERT INTO `test` VALUES (4, '張三');
INSERT INTO `test` VALUES (5, '王二');
INSERT INTO `test` VALUES (6, '護具');
INSERT INTO `test` VALUES (7, '無極');
INSERT INTO `test` VALUES (8, '護具');
INSERT INTO `test` VALUES (3, '空氣');
INSERT INTO `test` VALUES (9, '王二');
INSERT INTO `test` VALUES (10, '幾乎');
commit;

MySQL怎樣刪除重復(fù)數(shù)據(jù),只保留一條?,Mysql,MySQL

查看重復(fù)數(shù)據(jù),并篩選

select t.name,count(1) from test t where 1=1 group by t.name ;

MySQL怎樣刪除重復(fù)數(shù)據(jù),只保留一條?,Mysql,MySQL

使用having語句進行篩選

select t.name,count(1) from test t where 1=1 group by t.name HAVING count(1) >1;

MySQL怎樣刪除重復(fù)數(shù)據(jù),只保留一條?,Mysql,MySQL

對于重復(fù)數(shù)據(jù),保留一條數(shù)據(jù)篩選

select t.name,min(id) as  id ,count(1) from test t where 1=1 group by t.name;

MySQL怎樣刪除重復(fù)數(shù)據(jù),只保留一條?,Mysql,MySQL

刪除重復(fù)數(shù)據(jù)

delete from test where id not in (
select  min(id)  from test t where 1=1 group by t.name ) ;

執(zhí)行上述SQL語句,發(fā)現(xiàn)會報錯:

delete from test where id not in (
select  min(id)  from test t where 1=1 group by t.name )
> 1093 - You can't specify target table 'test' for update in FROM clause
> 時間: 0.004s

導(dǎo)致這一原因的問題是:不能在同一表中查詢的數(shù)據(jù)作為同一表的更新數(shù)據(jù)。

正確參考SQL:

(1) 創(chuàng)建一張表temp_table存儲最終保留的數(shù)據(jù)。
create table temp_table as SELECT min( id ) as id FROM test t WHERE 1 = 1 GROUP BY t.NAME;
(2) 排除表temp_table中的數(shù)據(jù),刪除即可。
DELETE FROM test WHERE id NOT IN (SELECT * FROM temp_table);

成功刪除重復(fù)數(shù)據(jù)!

MySQL怎樣刪除重復(fù)數(shù)據(jù),只保留一條?,Mysql,MySQL
文章來源地址http://www.zghlxwxcb.cn/news/detail-683795.html

到了這里,關(guān)于MySQL怎樣刪除重復(fù)數(shù)據(jù),只保留一條?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • SqlServer中根據(jù)某幾列獲取重復(fù)的數(shù)據(jù)將其刪除并保留最新一條

    SqlServer中根據(jù)某幾列獲取重復(fù)的數(shù)據(jù)將其刪除并保留最新一條

    有時候,我們某個數(shù)據(jù)表中,可能有幾列的數(shù)據(jù)都是一樣的,此時我們可能想查詢出這幾列數(shù)據(jù)相同的所有數(shù)據(jù)行,并保留最新一條,將其他重復(fù)的數(shù)據(jù)刪除。 假設(shè)我們有如下數(shù)據(jù)表: 此時我們可以使用 ROW_NUMBER 函數(shù),根據(jù)某幾列查詢出重復(fù)數(shù)據(jù)的新的排序列,該排序列就

    2024年04月28日
    瀏覽(27)
  • SQL語句刪除重復(fù)記錄且只保留一條有效記錄

    1. 查找表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個字段(name)來判斷 2. 刪除表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個字段(id)來判斷,只留有id最小的記錄 3. 刪除表中多余的重復(fù)記錄(多個字段),只留有id最小的記錄 參考:https://blog.csdn.net/JineD/article/details/126875291

    2024年02月13日
    瀏覽(23)
  • SQL刪除重復(fù)的記錄(只保留一條)-窗口函數(shù)row_number()

    SQL刪除重復(fù)的記錄(只保留一條)-窗口函數(shù)row_number()

    關(guān)于刪除mysql表中重復(fù)數(shù)據(jù)問題,本文中給到兩種辦法:聚合函數(shù)、窗口函數(shù)row_number()的方法。 (注意:MySQL從8.0開始支持窗口函數(shù)) 測試數(shù)據(jù)準(zhǔn)備:首先創(chuàng)建一個測試表test,插入一些測試數(shù)據(jù),模擬一些重復(fù)數(shù)據(jù)(最終目標(biāo):刪除重復(fù)數(shù)據(jù),但不處理null行) 先查詢下重復(fù)數(shù)

    2024年02月05日
    瀏覽(30)
  • MySQL大量臟數(shù)據(jù),如何只保留最新的一條?

    MySQL大量臟數(shù)據(jù),如何只保留最新的一條?

    因為系統(tǒng)的一個Bug,導(dǎo)致數(shù)據(jù)庫表中出現(xiàn)重復(fù)數(shù)據(jù),需要做的是刪除重復(fù)數(shù)據(jù)且只保留最新的一條數(shù)據(jù)。 具體場景是這樣的 當(dāng)然有人會說上面的問題我們可以建一個 order_no + cost_id 的組合唯一索引,這樣就算代碼有bug但至少數(shù)據(jù)庫表中不會有臟數(shù)據(jù)。 似乎這樣就可以了,然

    2023年04月20日
    瀏覽(22)
  • 解決MySQL中分頁查詢時多頁有重復(fù)數(shù)據(jù),實際只有一條數(shù)據(jù)的問題

    解決MySQL中分頁查詢時多頁有重復(fù)數(shù)據(jù),實際只有一條數(shù)據(jù)的問題

    有一個離奇的BUG,在查詢時,第一頁跟第二頁有一個共同的數(shù)據(jù)。有的數(shù)據(jù)卻不顯示。 后來發(fā)現(xiàn)是在SQL排序時沒用主鍵排序。 解決:使用主鍵排序 以下是我準(zhǔn)備的舉例,可以自己試試。 分頁查詢公式:分頁查詢–他的公式為(偽代碼): [NOT] LIMIT (curPage-1)*pageSize,pageSize 執(zhí)行

    2024年02月16日
    瀏覽(16)
  • 在 MySQL 數(shù)據(jù)庫中刪除重復(fù)記錄的步驟

    當(dāng)我們在處理數(shù)據(jù)庫中的數(shù)據(jù)時,有時候會出現(xiàn)重復(fù)記錄的情況,這些重復(fù)記錄會影響數(shù)據(jù)的正確性,需要將其刪除。下面是在 MySQL 數(shù)據(jù)庫中刪除重復(fù)記錄的步驟: 首先,我們需要找到數(shù)據(jù)庫表中的重復(fù)記錄??梢允褂靡韵?SQL 語句查詢表中所有的重復(fù)記錄: 其中, table_

    2024年02月15日
    瀏覽(92)
  • MySQL 聯(lián)表查詢重復(fù)數(shù)據(jù)并刪除(子查詢刪除記錄) SQL優(yōu)化

    數(shù)據(jù)庫表介紹: table_a :主表(小表,表數(shù)據(jù)不可重復(fù)) table_b :流水表(大表,記錄審核流水?dāng)?shù)據(jù)) 注:兩表表結(jié)構(gòu)大致一致,流水表增加一個審核狀態(tài)的字段 業(yè)務(wù)邏輯: 主表保存唯一數(shù)據(jù),流水表記錄審核流水?dāng)?shù)據(jù),用于后續(xù)展示,并在審核成功后插入主表,在插入流

    2023年04月08日
    瀏覽(30)
  • mysql -- 左連接一對多只取一條,去重重復(fù)字段

    ? ? ? ? 例如,給你一張用戶表,還有一張地區(qū)信息表(每條數(shù)據(jù)都是到省 - 市 - 縣 的地區(qū)信息,具體到縣區(qū)),用戶表中有用戶所在市區(qū)字段,你要根據(jù) 地區(qū)信息表 查用戶的所在市區(qū)的市區(qū)編碼。就會出現(xiàn)一個情況,用戶表 左連接 地區(qū)信息表? 根據(jù)市區(qū)信息去匹配,一

    2024年02月16日
    瀏覽(21)
  • mysql將多條數(shù)據(jù)合并成一條

    mysql將多條數(shù)據(jù)合并成一條

    實現(xiàn)將多條數(shù)據(jù)合并為一條數(shù)據(jù),在mysql中可以通過?GROUP_CONCAT 函數(shù)實現(xiàn) 解決方案:用 GROUP_CONCAT -- 主表單個字段單個id,對應(yīng)子表多個id 多字段如何處理 GROUP_CONCAT(CONCAT_WS(\\\',\\\', type , typename ) SEPARATOR \\\',\\\') IN在子查詢中不起作用group_concat,解決方法見 ↓ IN在子查詢中不起作用group

    2024年02月12日
    瀏覽(19)
  • MySQL 數(shù)據(jù)抽稀 每分鐘取一條

    MySQL 數(shù)據(jù)抽稀 每分鐘取一條

    假如原始數(shù)據(jù)為每5秒一個數(shù)據(jù),現(xiàn)在想展示為每4分鐘一條數(shù)據(jù),先按照分鐘數(shù)把除以4余數(shù)為0的行選出來,在按照 年月日 時分,做組內(nèi)排序(窗函數(shù)ROW_NUMBER),最后再拿出序號為1的行。 以下每分鐘一條 以下每4分鐘一條

    2024年02月15日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包