A8站源码交易平台 首要我依照群友的数据结构创建了一张表,填充了一部分数据,结构如下图所示:
那么咱们首要来确认咱们删去数据的时分的所需条件,首要找到一切重复的数据记载,运用如下sql句子进行
select * from a group by cardno having count(cardno) > 1
查询成果如下:
查询出来的是一切重复数据的第一条记载,可是这个是咱们需求保存的,所以条件变成了,(改用如下的sql句子查询,依据cardno查询)重复数据中不包括本条记载的成果删去:
这儿现已更正
查询句子如下:
select id,cardno from a where cardno in (select cardno from a group by cardno having count(cardno)>1)
and id not in(select min(id) from a group by cardno having count(cardno)>1)
这些记载是咱们需求删去的,接下来咱们就直接删去掉这些数据就可以了,咱们依据id主键来删去,sql句子如下:
delete from a where id in(select id from a where cardno in (select cardno from a group by cardno having count(cardno)>1)
and id not in(select min(id) from a group by cardno having count(cardno)>1))
履行成果如下:
Oops!报错了,这条提示信息说的是,诶同学,在MySql里你不能先查询了然后再删去诶!,这个就只能等官方晋级支撑这个新特性了,可是咱们现在就要处理这个扎手的问题啊,肿么办?咱们用暂时表来处理,然后咱们的删去句子变成了,A8站源码交易平台 这个姿态:
delete from a where id in (select id from (select id from a where cardno in (select cardno from a group by cardno having count(cardno)>1)
and id not in(select min(id) from a group by cardno having count(cardno)>1)) as tmpresult)
执行,能够看到咱们上面查询的出来要删去的6条重复数据现已被整理掉了,结果如下:
只想删去固定的卡号的话该怎么办呢?A8站源码交易平台
这个就相当于附加的条件挑选了,咱们直接在暂时表的查询里附加条件:(注:赤色加粗字体是附加条件)
delete from a where id in (select id from (select id from a where cardno in (select cardno from a group by cardno having count(cardno)>1 and cardno=333)
and id not in(select min(id) from a group by cardno having count(cardno)>1)) as tmpresult)
这样儿就完成了Mysql删去重复数据的需求。