欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql去除重復(fù)數(shù)據(jù)只保留一條數(shù)據(jù)實(shí)例

 更新時(shí)間:2023年08月02日 11:28:50   作者:電風(fēng)扇頭發(fā)  
這篇文章主要給大家介紹了關(guān)于mysql去除重復(fù)數(shù)據(jù)只保留一條數(shù)據(jù)的相關(guān)資料,在使用MySQL時(shí),有時(shí)需要查詢出某個(gè)字段不重復(fù)的記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

梳理一下關(guān)于刪除重復(fù)記錄的邏輯

前期準(zhǔn)備:建表插入數(shù)據(jù)

-- 創(chuàng)建表格emp
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp`  (
  `EMPNO` int(0) NULL DEFAULT NULL,
  `ENAME` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `JOB` varchar(9) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `MGR` int(0) NULL DEFAULT NULL,
  `HIREDATE` date NULL DEFAULT NULL,
  `SAL` int(0) NULL DEFAULT NULL,
  `COMM` int(0) NULL DEFAULT NULL,
  `DEPTNO` int(0) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- 插入數(shù)據(jù)
INSERT INTO `emp` VALUES (7566, '瓊斯1', '經(jīng)理', 7839, '1981-04-02', 2975, NULL, 20);
INSERT INTO `emp` VALUES (7654, '馬丁', '售貨員', 7698, '1981-09-28', 1250, 1400, 30);
INSERT INTO `emp` VALUES (7782, '克拉克', '經(jīng)理', 7839, '1981-06-09', 2450, NULL, 10);
INSERT INTO `emp` VALUES (7788, '斯科特', '分析師', 7566, '1987-04-19', 3000, NULL, 20);
INSERT INTO `emp` VALUES (7839, '國(guó)王', '總統(tǒng)', NULL, '1981-11-17', 5000, NULL, 10);
INSERT INTO `emp` VALUES (7844, '特納', '售貨員', 7698, '1981-09-08', 1500, 0, 30);
INSERT INTO `emp` VALUES (7876, '亞當(dāng)斯', '店員', 7788, '1987-05-23', 1100, NULL, 20);
INSERT INTO `emp` VALUES (7900, '詹姆斯', '店員', 7698, '1981-12-03', 950, NULL, 30);
INSERT INTO `emp` VALUES (7902, '福特', '分析師', 7566, '1981-12-03', 3000, NULL, 20);
INSERT INTO `emp` VALUES (7521, '沃德', '售貨員', 7698, '1981-02-22', 1250, 500, 30);
INSERT INTO `emp` VALUES (7934, '米勒', '店員', 7782, '1982-01-23', 1300, NULL, 10);
INSERT INTO `emp` VALUES (7499, '艾倫', '售貨員', 7698, '1981-02-20', 1600, 300, 30);
INSERT INTO `emp` VALUES (7698, '布萊克', '經(jīng)理', 7839, '1981-05-01', 2850, NULL, 30);
INSERT INTO `emp` VALUES (7566, '瓊斯', '經(jīng)理', 7839, '1981-04-02', 2975, NULL, 20);
SET FOREIGN_KEY_CHECKS = 1;

表格來(lái)自oracle自帶emp表。

1、通過(guò)group by 和count(1)>1找出有重復(fù)的數(shù)據(jù)

SELECT  ename,count(1) FROM emp GROUP BY ename HAVING count(1) >1;

在group by 之后 count(1)> 1代表其分組數(shù)據(jù)是重復(fù)的。

 具體group by 字段根據(jù)實(shí)際情況需求添加。

結(jié)果如下:

2、通過(guò)每個(gè)分組中的最小id來(lái)去重

2.1、添加主鍵id列

由于表格沒有主鍵列,所以需要新增id自增。

ALTER TABLE emp add id int first; -- 改變表結(jié)構(gòu),增加名為id的列
	ALTER table emp MODIFY id int PRIMARY key auto_increment; -- 將id字段設(shè)置為主鍵自增;

2.2 去重           

2.2.1、首先找出每個(gè)分組中count(1) >1的數(shù)據(jù)中的最小id【min(id)】,sql語(yǔ)句如下:

SELECT min(id) id,ename,count(0) FROM emp GROUP BY ename HAVING count(1) >1;

結(jié)果如下:

2.2.2、再將上表和emp表做表連接,sql語(yǔ)句如下:

SELECT t1.*,t2.* from
		emp t1
		inner join (SELECT min(id) id,ename,count(0) FROM emp GROUP BY ename HAVING count(1) >1) t2
		on t1.ENAME = t2.ENAME;

結(jié)果如下:

可以看出t1.id和t2.id之間的聯(lián)系,我們只需要?jiǎng)h除t1.id > t2.id的數(shù)據(jù),只留下每組中id最小的值和count(1)= 1 的數(shù)據(jù)。

需要用到MySQL DELETE語(yǔ)句使用INNER JOIN子句,語(yǔ)法如下:

DELETE  a FROM table1 AS a LEFT JOIN table2 AS b ON 連接條件 WHERE 過(guò)濾條件;

完整去重sql語(yǔ)句如下:

DELETE t1 from
		emp t1
inner join (SELECT min(id) id,ename,count(0) FROM emp GROUP BY ename HAVING count(1) >1) t2
		on t1.ENAME = t2.ENAME
where t1.id > t2.id;

總結(jié)

到此這篇關(guān)于mysql去除重復(fù)數(shù)據(jù)只保留一條數(shù)據(jù)的文章就介紹到這了,更多相關(guān)mysql去除重復(fù)數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mysql中xtrabackup備份的實(shí)現(xiàn)

    Mysql中xtrabackup備份的實(shí)現(xiàn)

    Xtrabackup是Percona團(tuán)隊(duì)開發(fā)的用于MySQL數(shù)據(jù)庫(kù)物理熱備份的開源備份工具,本文就來(lái)介紹一下Mysql中xtrabackup備份的實(shí)現(xiàn),就有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Mysql查詢優(yōu)化之IN子查詢優(yōu)化方法詳解

    Mysql查詢優(yōu)化之IN子查詢優(yōu)化方法詳解

    項(xiàng)目中有需要,使用MySQL的in子查詢,查詢符合in子查詢集合中條件的數(shù)據(jù),但是沒想到的是,MySQL的in子查詢會(huì)如此的慢,讓人無(wú)法接受,下面這篇文章主要給大家介紹了關(guān)于Mysql查詢優(yōu)化之IN子查詢優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • MySQL分區(qū)表的使用

    MySQL分區(qū)表的使用

    本文詳細(xì)介紹了在MySQL中創(chuàng)建分區(qū)表的方法和注意事項(xiàng),包括Range和List兩種常見分區(qū)類型的具體操作流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • Mysql使用索引的正確方法及索引原理詳解

    Mysql使用索引的正確方法及索引原理詳解

    這篇文章主要給大家介紹了關(guān)于Mysql使用索引的正確方法及索引原理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • MySQL外鍵使用及說(shuō)明詳解

    MySQL外鍵使用及說(shuō)明詳解

    MySQL通過(guò)外鍵約束來(lái)保證表與表之間的數(shù)據(jù)的完整性和準(zhǔn)確性。這篇文章還通過(guò)外鍵的使用條件和外鍵的好處定義語(yǔ)法方面介紹了mysql外鍵使用及說(shuō)明,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友一起看下吧
    2016-08-08
  • MySQL跨服務(wù)器關(guān)聯(lián)查詢的實(shí)現(xiàn)

    MySQL跨服務(wù)器關(guān)聯(lián)查詢的實(shí)現(xiàn)

    本文主要介紹了MySQL跨服務(wù)器關(guān)聯(lián)查詢的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • mysql服務(wù)器查詢慢原因分析與解決方法小結(jié)

    mysql服務(wù)器查詢慢原因分析與解決方法小結(jié)

    在開發(fā)的朋友特別是和mysql有接觸的朋友會(huì)碰到有時(shí)mysql查詢很慢,當(dāng)然我指的是大數(shù)據(jù)量百萬(wàn)千萬(wàn)級(jí)了,不是幾十條了,下面我們來(lái)看看解決查詢慢的辦法
    2012-04-04
  • MySQL大庫(kù)搭建主從的一種思路分享

    MySQL大庫(kù)搭建主從的一種思路分享

    這篇文章主要介紹了MySQL大庫(kù)搭建主從的一種思路分享,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-03-03
  • MySQL DBA教程:Mysql性能優(yōu)化之緩存參數(shù)優(yōu)化

    MySQL DBA教程:Mysql性能優(yōu)化之緩存參數(shù)優(yōu)化

    在平時(shí)被問及最多的問題就是關(guān)于 MySQL 數(shù)據(jù)庫(kù)性能優(yōu)化方面的問題,所以最近打算寫一個(gè)MySQL數(shù)據(jù)庫(kù)性能優(yōu)化方面的系列文章,希望對(duì)初中級(jí) MySQL DBA 以及其他對(duì) MySQL 性能優(yōu)化感興趣的朋友們有所幫助
    2014-03-03
  • MySQL密碼正確卻無(wú)法本地登錄-1045

    MySQL密碼正確卻無(wú)法本地登錄-1045

    這篇文章主要介紹了MySQL密碼正確卻無(wú)法本地登錄-1045 Access denied for user 'root'@'localhost' (using password:YES,需要的朋友可以參考下
    2019-12-12

最新評(píng)論