如題:
有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...