mysql刪除重複資料保留id最小(最大)的資料

2021-09-11 18:16:29 字數 1016 閱讀 9023

如題:

有person表

+----+---------+

| id | email |

+----+---------+

| 1 | [email protected] |

| 2 | [email protected] |

| 3 | [email protected] |

+----+---------+

這類問題在資料庫的筆試題中經常會遇見,解題思路有兩個,一連線,二子查詢

連線

delete p1

from

person p1,

person p2

where

p1.email = p2.email

and p1.id > p2.id

子查詢

delete

from

person

where

id not in ( select id from ( select min( id ) as id from person group by email ) as m );

應該注意的是上述解法額外巢狀了乙個 select 語句,如果不這麼做,會出現錯誤:you can't specify target table 'person' for update in from clause。以下演示了這種錯誤解法。

delete

from

person

where

id not in ( select min( id ) as id from person group by email );

因為mysql中,不能先select乙個表的記錄,在按此條件進行更新和刪除同乙個表的記錄。解決辦法是,將select得到的結果,再通過中間表select一遍,這樣就規避了錯誤,這個問題只出現於mysql,mssql和oracle不會出現此問題。

MySQL刪除重複資料,只保留其中最大id的一條

今天同事寫了個刪除重複資料保留一條記錄的資料庫語句,問我錯在哪兒,正好給大家講講 注 以下語句只單對mysql資料庫 語句 問題 delete from show where id not in select max id from show where led 43 and location an...

mysql刪除重複資料

最近遇到刪除重複資料的問題,先分享一下解決辦法,如有不完善之處還望包涵!舉例如下 mysql select from table03 id name degree 1 fly 90 2 fly 90 3 fly 90 4 fly 80 5 wang 90 6 wang 90 7 wang 90 8 ...

MySQL 刪除重複資料

建表,插入資料,當然如果你不想測試一下,也可以直接用後面的刪除語句 create table if not exists tb01 id int unsigned primary key auto increment,name varchar 10 not null insert into tb01...