有時候數據庫會不可避免的導入重複的數據,我們就需要根據某些條件去確定哪些是重複的數據,然後把它刪除。
創建如下表
<span style="font-size:18px;">CREATE TABLE `first_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`user_no` varchar(50) DEFAULT NULL,
`address` varchar(50) DEFAULT NULL,
`telphone` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;</span>
在這裏面,名字,電話,地址一樣的數據很多條,假設,我們想刪除,名字和地址一樣的員工
第一步:查找名字和地址一樣的數據
select * from first_table group by username,address
第二步:把他們的id當作使用標記
select min(id) from first_table GROUP BY username,address;
第三步:刪除id不在查詢範圍的。
delete from first_table where id not in (select min(id) from first_table GROUP BY username,address);
下面的句子看着很正確,但是運行的時候會報下面的錯
[Err] 1093 - You can't specify target table 'first_table' for update in FROM clause;
大意就是,你不能一邊查詢,一邊又刪除,系統不支持你這麼做,
這時候我們只需要一個小小的修改,給我們查詢的數據起個別名
delete from first_table
where id not in (select * from (
select min(id) from first_table GROUP BY username,address
) as p
);
在查詢表中數據