mysql刪除重複記錄,儲存Id最小的一條
方法1:
1、建立一個臨時表,選取需要的資料。
2、清空原表。
3、臨時表資料匯入到原表。
4、刪除臨時表。
mysql> select * from student;
+----+------+
| ID | NAME |
+----+------+
| 11 | aa |
| 12 | aa |
| 13 | bb |
| 14 | bb |
| 15 | bb |
| 16 | cc |
+----+------+
6 rows in set
mysql> create temporary table temp as select min(id),name from student group by name;
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0
mysql> truncate table student;
Query OK, 0 rows affected
mysql> insert into student select * from temp;
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from student;
+----+------+
| ID | NAME |
+----+------+
| 11 | aa |
| 13 | bb |
| 16 | cc |
+----+------+
3 rows in set
mysql> drop temporary table temp;
Query OK, 0 rows affected
這個方法,顯然存在效率問題。
方法2:按name分組,把最小的id儲存到臨時表,刪除id不在最小id集合的記錄,如下:
mysql> create temporary table temp as select min(id) as MINID from student group by name;
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0
mysql> delete from student where id not in (select minid from temp);
Query OK, 3 rows affected
mysql> select * from student;
+----+------+
| ID | NAME |
+----+------+
| 11 | aa |
| 13 | bb |
| 16 | cc |
+----+------+
3 rows in set
方法3:直接在原表上操作,容易想到的sql語句如下:
mysql> delete from student where id not in (select min(id) from student group by name);
執行報錯:1093 - You can't specify target table 'student' for update in FROM clause
原因是:更新資料時使用了查詢,而查詢的資料又做了更新的條件,mysql不支援這種方式。
怎麼規避這個問題?
再加一層封裝,如下:
mysql> delete from student where id not in (select minid from (select min(id) as minid from student group by name) b);
Query OK, 3 rows affected
mysql> select * from student;
+----+------+
| ID | NAME |
+----+------+
| 11 | aa |
| 13 | bb |
| 16 | cc |
+----+------+
3 rows in set
相關文章
- MySQL刪除重複記錄並保留第一條MySql
- 刪除重複id的記錄
- sql刪除重複記錄只保留一條SQL
- mysql刪除一條記錄MySql
- mysql表刪除重複記錄方法MySql
- Mysql語句查詢指定重複記錄和刪除重複記錄僅保留一條【親測可以】MySql
- MYSQL中刪除重複記錄的方法薦MySql
- Oracle如何刪除表中重複記錄保留第一條Oracle
- 刪除Oracle重複記錄Oracle
- oracle刪除重複記錄Oracle
- db2刪除重複的記錄DB2
- oracle-快速刪除重複的記錄Oracle
- MySQL刪除表重複記錄的三種方法舉例MySql
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- DB2 刪除重複記錄DB2
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄) 轉Oracle
- 【轉】oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- excel刪除重複資料保留一條 如何刪掉重複資料只留一條Excel
- Oracle查詢重複資料與刪除重複記錄Oracle
- Oracle使用over()partition by刪除重複記錄Oracle
- Oracle如何刪除表中重複記錄Oracle
- 查詢刪除表中重複記錄
- mysql 刪除重複項MySql
- 記錄一下避免排序和刪除重複行排序
- Oracle 刪除表中重複記錄的DELETE SQLOracledeleteSQL
- Oracle查詢重複資料與刪除重複記錄方法Oracle
- Oracle 刪除重複資料只留一條Oracle
- 高效快速刪除Oracle表中重複記錄Oracle
- MySQL刪除重複資料MySql
- sql server 中刪除內容重複的某條記錄SQLServer
- MySQL資料庫中刪除重複記錄的方法總結[推薦]MySql資料庫
- Oracle刪重複記錄Oracle
- db2中刪除重複記錄的問題DB2
- SQL Server 批量刪除重複記錄(批量、快速、安全)SQLServer
- 在SQL Server中快速刪除重複記錄(轉)SQLServer
- 處理表重複記錄(查詢和刪除)
- sql刪除一條記錄後其他記錄的id自動遷移,使id連續SQL
- 用SQL語句刪除重複記錄的四種方法SQL