删除数据库中重复的记录,只保留一条

DELETE FROM tb_gps_records WHERE id NOT IN (SELECT bid FROM (SELECT min(id) as bid FROM tb_gps_records GROUP BY busNo,longitude,latitude)as b);

//cityId=287

DELETE FROM tb_gps_records WHERE cityId=287 and id NOT IN (SELECT bid FROM (SELECT min(id) as bid FROM tb_gps_records GROUP BY busNo,longitude,latitude)as b);

案例:
id         姓名  课程名称 分数
1         张三     数学    69
2          李四       
数学    89
3          张三       
数学    69
删除除了自动编号不同,其他都相同的学生冗余信息

------------------------------------------------------------------------------------------------------
按常理来说,这个sql语句应该是:
delete tablename where id not in(select min(id) from tablename group by
name,kecheng,fenshu);
这种写法在sqlserver或者oracle中是支持的,但是mysql目前是不支持的,会报类似错:You
can't specify target table 'tablename' for update ,这是因为在mysql中不能同时查询一个表的数据再同时进行删除.
目前网上流行的一种解法是:
1)创建一个临时表,讲要查询的列的存入临时表中
create table temp as select ...
2)在temp表和原始表中进行操作
delete from tablename
3)drop temp...
但是这种做法,不仅浪费空间资源,同时也缺乏友好性。通过观察我们发现这类查询要解决的是如何将子查询中的表与主查询中的表区分开来,因此我们可以考虑用别名的方法,将子查询的结果放到一个别名中。
完整的sql语句如下:
DELETE FROM tablename where id not in (select bid
from (select min(id) as bid from tablename group by name,kecheng,fenshu) as b )
;
解释:
select bid from (select min(id) as bid from tablename group by
name,kecheng,fenshu) as b
这个子查询的目的是从b中列出讲筛选结果,即bid的集合。
(select min(id) as bid from tablename group by name,kecheng,fenshu) as b
将分组结果中的最小的bid当做一个心的集合当做一个心的子表b,
注意mid(id)一定要有一个别名,这里取的是bid,作为b的一个列名,因为在上一级查询中要用到这个列名(红色标注)。

mysql中删除完全重复数据的准确SQL语句的更多相关文章

  1. ***mysql中查询今天、昨天、上个月sql语句

    今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天Select * FROM 表名 Where TO_DAYS( NOW( ) ...

  2. mysql中查看ef或efcore生成的sql语句

    http://www.solves.com.cn/it/sjk/MYSQL/2019-07-01/1336.html 涉及命令 1.开启general log模式 MySQL>set globa ...

  3. jmeter 中如何一次运行多条sql语句

    在jmeter测试mysql中如何一次运行多条sql语句 allowMultiQueries=true 注意:太低版本的mysql和jdbc不支持,最好用最新版的

  4. 删除oracle表中的完全重复数据

    今天数据库除了个问题:项目中的一张表,数据是从另外一个系统中相同的表里弄过来的,但是可能由于昨天同事导数据导致我这张表中的数据出现了完全相同的情况(所有字段),全部是两条,需要删除相同的数据. 做法: ...

  5. MySQL 中删除的数据都去哪儿了?

    不知道大家有没有想过下面这件事? 我们平时调用 DELETE 在 MySQL 中删除的数据都去哪儿了? 这还用问吗?当然是被删除了啊 那么这里又有个新的问题了,如果在 InnoDB 下,多事务并发的情 ...

  6. mysql查询表里的重复数据方法:

    INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11') delete from hk_test  ...

  7. MYSQL中约束及修改数据表

    MYSQL中约束及修改数据表 28:约束约束保证数据的完整性和一致性约束分为表级约束和列级约束约束类型包括:    NOT NULL(非空约束)    PRIMARY KEY(主键约束)    UNI ...

  8. splice从数组中删除指定定数据

    /*从数组中删除指定定数据var somearray = ["mon", "tue", "wed", "thur"]so ...

  9. mySQL中删除unique key的语法 (删除某个字段的唯一性)

    mySQL中删除unique key的语法 CREATE TABLE `good_booked` (  `auto_id` int(10) NOT NULL auto_increment,  `goo ...

随机推荐

  1. Log4j 2

    Log4j – Apache Log4j 2 - Apache Log4j 2 http://logging.apache.org/log4j/2.x/ Apache Log4j 2 Apache L ...

  2. 微信支付 统一订单 $order = WxPayApi::unifiedOrder($input); 断点调试

    定位至 CODE /** * 将xml转为array * @param string $xml * @throws WxPayException */ public static function I ...

  3. Shell正则表达式和文本处理工具

    作业一:整理正则表达式博客 一.什么是正则 正则就是用一些具有特殊含义的符号组合而成(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 通配符是由shell解释得. ...

  4. STL中使用reverse_iterator时,如何正确使用erase函数

    假设有一个list容器,顺序存储了0-9一个10个整数.现在要使用reverse_iterator迭代器来查找值为8和5的元素,并且将这两个数删除.先来看以下的解决方法: #include <i ...

  5. tornado 第一篇

     一:异步和非阻塞IO 实时的web特性通常需要每个用户一个大部分时间,在传统的同步web服务器中,这意味着需要给每个用户分配一个专用的线程,这样的开销是十分巨大 tornado使用啦一种单线程事件循 ...

  6. 安装RabbitMQ3.6.10报错:{error,{missing_dependencies,[crypto,ssl],

    参考https://blog.csdn.net/u010739551/article/details/80848993 如果安装上篇博文安装则可避免这种情况 CentOS6.7安装RabbitMQ3. ...

  7. Android学习十二---在android上实现图像匹配

    一.效果图及功能描述 效果图 点击ShowImg后 点击match,然后点击showmatch,可以不断点击showmatch. 主要功能描述:显示在SD卡上已经存在的图片test.jpg,根据图片在 ...

  8. java.net.SocketException四大异常解决方案(转)

    java.net.SocketException如何才能更好的使用呢?这个就需要我们先要了解有关这个语言的相关问题.希望大家有所帮助.那么我们就来看看有关java.net.SocketExceptio ...

  9. mac截屏

    shift+command+3 : 截全屏 shift+command+4 : 出现十字架的坐标图标,画框截图

  10. C++11 中的initialize_list

    这就是一个简单的模板类,不过在C++中有了特殊的语法支持,定义的时候使用如下的格式: initialize_list<double> dl = {1.1, 1.2}; 或者: initia ...