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
相關文章
- 刪除重複id的記錄
- MySQL刪除重複記錄並保留第一條MySql
- sql刪除重複記錄只保留一條SQL
- mysql刪除一條記錄MySql
- Mysql語句查詢指定重複記錄和刪除重複記錄僅保留一條【親測可以】MySql
- Oracle如何刪除表中重複記錄保留第一條Oracle
- mysql 刪除重複項MySql
- excel刪除重複資料保留一條 如何刪掉重複資料只留一條Excel
- MariaDB刪除重複記錄效能測試
- MySQL資料庫中刪除重複記錄的方法總結[推薦]MySql資料庫
- mysql 刪除表中重複的資料MySql
- MySQL的varchar儲存原理:InnoDB記錄儲存結構MySql
- VSCode刪除重複的空行VSCode
- 蘋果裝置中儲存的地理位置記錄怎麼刪除蘋果
- 刪除oracle重複值Oracle
- JavaScript 刪除重複字元JavaScript字元
- 刪除重複資料
- 【常用方法推薦】如何刪除MySQL的重複資料?MySql
- MySQL:簡單記錄刪除binary log的介面MySql
- ORACLE 在缺少主鍵ID的情況下刪除重複資料,只保留一行Oracle
- 請給Array本地物件增加一個原型方法,它用於刪除陣列條目中重複的條目(可能有多個),返回值是一個包含被刪除的重複條目的新陣列。...物件原型陣列
- mongodb刪除重複資料MongoDB
- JavaScript 刪除字串重複字元JavaScript字串字元
- MySql避免重複插入記錄的幾種方法MySql
- mysql支援跨表delete刪除多表記錄MySqldelete
- MySQL防止重複插入相同記錄 insert if not existsMySql
- 使用者對某條賬單記錄的刪除操作
- mysql 查詢出重複資料的第一條MySql
- JavaScript陣列刪除重複元素JavaScript陣列
- sqlserver中刪除重複資料SQLServer
- JavaScript 刪除陣列重複元素JavaScript陣列
- Remove Duplicate Letters 刪除重複元素REM
- JavaScript刪除字串中重複字元JavaScript字串字元
- 刪除排序陣列中的重複項排序陣列
- 每日一題 [26] 刪除排序陣列中的重複項每日一題排序陣列
- MYSQL資料庫表記錄刪除解決方案MySql資料庫
- JavaScript陣列刪除重複內容JavaScript陣列
- 解析postgresql 刪除重複資料案例SQL
- PostgreSQL刪除表中重複資料SQL