mysql 开发技巧之JOIN 更新和数据查重/去重
主要涉及:JOIN 、JOIN 更新、GROUP BY HAVING 数据查重/去重
1 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN(MySQL 不支持)、CROSS JOIN
这是在网上找到的非常好的一篇博文,图解 join 语句:
CODING HORROR-A Visual Explanation of SQL Joins
下图可以很清楚的明白,join 的数据选取范围
[][1]
[1]: http://7xs09x.com1.z0.glb.clouddn.com/160725-imooc-mysql-development-skills-notes-001.png
2 更新使用过滤条件中包括本身的表
更新 t1 t2 表中 col_a 重复的字段
UPDATE t1 SET col_a = 'hi' WHERE t1.col_a IN ( SELECT b.col_a FROM t1 a INNER JOIN t2 b on a.col_a = b.col_a ) ; ERROR:1093
可转换为:
UPDATE t1 aa JOIN( SELECT b.col_a FROM t1 a INNER JOIN t2 b on a.col_a = b.col_a )bb on aa.col_a= bb.col_a SET col_a = 'hi' ;
3 查询重复数据、删除重复数据
利用 GROUP BY 和 HAVING 查询重复数据
SELECT col_a, COUNT(*) FROM t1 GROUP BY col_a HAVING COUNT(*) > 1 ;
删除重复数据,对于相同数据保留 ID 最大的
DELETE a FROM t1 a JOIN ( SELECT col_a,COUNT(*),MAX(id) AS id FROM t1 GROUP BY col_a HAVING COUNT(*) > 1 )b ON a.col_a = b.col_a WHERE a.id < b.id ;
感谢阅读此文,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
MySQL去重的方法整理
MySQL去重的方法整理 [初级]有极少的重复行 使用distinct查出来,然后手动一行一行删除. [中级]按照单个字段的重复去重 例如:对id字段去重 使用方法:获取id的重复字段的值,利用相同id字段所在的行中,比较出数据不同的字段,删除 除了最小(或最大)的字段所在的该行之外的所有重复的行.一般使用主键来比较,因为主键的值一定是唯一值,绝对不相同. id name 1 a 1 b 2 c 2 a 3 c 结果: id name 1 a 2 a 操作: delete from a_tmp
-
Mysql删除重复的数据 Mysql数据去重复
MySQL数据库中查询重复数据 select * from employee group by emp_name having count (*)>1; Mysql 查询可以删除的重复数据 select t1.* from employee t1 where (t1.emp_name) in (select t4.emp_name from (select t2.emp_name from employee t2 group by t2.emp_name having count(*)>1)
-
mysql去重的两种方法详解及实例代码
mysql去重 方法一: 在使用MySQL时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值.其原因是 distinct只能返回它的目标字段,而无法返回其它字段 下面先来看看例子: table id name 1 a 2 b 3 c 4 c 5 b 库结构大概这样,这只是一个简单的例子,实际情况会复杂得多. 比如我想用一条语句查询得到name不重复的所有
-
mysql 开发技巧之JOIN 更新和数据查重/去重
主要涉及:JOIN .JOIN 更新.GROUP BY HAVING 数据查重/去重 1 INNER JOIN.LEFT JOIN.RIGHT JOIN.FULL JOIN(MySQL 不支持).CROSS JOIN 这是在网上找到的非常好的一篇博文,图解 join 语句: CODING HORROR-A Visual Explanation of SQL Joins 下图可以很清楚的明白,join 的数据选取范围 [][1] [1]: http://7xs09x.com1.z0.glb.clo
-
MySQL 数据查重、去重的实现语句
有一个表user,字段分别有id.nick_name.password.email.phone. 一.单字段(nick_name) 查出所有有重复记录的所有记录 select * from user where nick_name in (select nick_name from user group by nick_name having count(nick_name)>1); 查出有重复记录的各个记录组中id最大的记录 select * from user where id in (se
-
MYSQL开发性能研究之批量插入数据的优化方法
一.我们遇到了什么问题 在标准SQL里面,我们通常会写下如下的SQL insert语句. INSERT INTO TBL_TEST (id) VALUES(1); 很显然,在MYSQL中,这样的方式也是可行的.但是当我们需要批量插入数据的时候,这样的语句却会出现性能问题.例如说,如果有需要插入100000条数据,那么就需要有100000条insert语句,每一句都需要提交到关系引擎那里去解析,优化,然后才能够到达存储引擎做真的插入工作. 正是由于性能的瓶颈问题,MYSQL官方文档也就提到了使用批
-
MySQL开发规范与使用技巧总结
1.命名规范 1.库名.表名.字段名必须使用小写字母,并采用下划线分割. a)MySQL有配置参数lower_case_table_names,不可动态更改,linux系统默认为 0,即库表名以实际情况存储,大小写敏感.如果是1,以小写存储,大小写不敏感.如果是2,以实际情况存储,但以小写比较. b)如果大小写混合使用,可能存在abc,Abc,ABC等多个表共存,容易导致混乱. c)字段名显示区分大小写,但实际使⽤用不区分,即不可以建立两个名字一样但大小写不一样的字段. d)为了统一规范, 库名
-
Python实现mysql数据库更新表数据接口的功能
前言 昨天,因为项目需求要添加表的更新接口,来存储预测模型训练的数据,所以自己写了一段代码实现了该功能,在开始之前,给大家分享python 操作mysql数据库基础: #coding=utf-8 import MySQLdb conn= MySQLdb.connect( host='localhost', port = 3306, user='root', passwd='123456', db ='test', ) cur = conn.cursor() #创建数据表 #cur.execute
-
mysql实用技巧之比较两个表是否有不同数据的方法分析
本文实例讲述了mysql比较两个表是否有不同数据的方法.分享给大家供大家参考,具体如下: 在数据迁移中,我们经常需要比较两个表,以便在一个表中标识另一个表中没有相应记录的记录. 例如,我们有一个新的数据库,其架构与旧数据库不同.我们的任务是将所有数据从旧数据库迁移到新数据库,并验证数据是否正确迁移.要检查数据,我们必须比较两个表,一个在新数据库中,一个在旧数据库中,并标识不匹配的记录. 假设有两个表:t1和t2.使用以下步骤比较两个表,并确定不匹配的记录,按着常用的思路就是,我们先查t1,完事呢
-
php+mysql开发中的经验与常识小结
本文总结了php+mysql开发中的经验与常识.分享给大家供大家参考,具体如下: 一.基础规范 (1)尽量使用 InnoDB 存储引擎 支持事务.行级锁.并发性能更好,CPU 及内存缓存页优化得当,资源利用率更高 (2)必须使用 UTF8 字符集 无需转码,无乱码风险 (3)数据表.数据字段必须加入中文注释 N 年后谁知道这个 r1,r2,r3 字段是干嘛的 (4)尽量不要使用存储过程.视图.触发器.Event 高并发大数据的互联网业务,架构设计思路是"解放数据库 CPU,将计算转移到服务层&q
-
jQuery EasyUI开发技巧总结
jQuery EasyUI开发技巧总结 1.使用tabs时,如果使用的不是url,而是content,则要嵌入iframe addTab({ title:node.text, closeable:true, content:'<iframe src="'+url+'" frameborder="0" style="border:0;width:100%;height:99%"></iframe> }); 1)外部调用ifr
-
101个MySQL优化技巧和提示
MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些思路是通用的.我已经把他们分成几类,来帮助你掌握更多MySQL的调节和优化技巧. MySQL 服务器硬件和操作系统调节: 1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中--在内存中访问文件时的速度要比在硬盘中访问时快的多. 2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读
-
Mysql update多表联合更新的方法小结
下面我建两个表,并执行一系列sql语句,仔细观察sql执行后表中数据的变化,很容易就能理解多表联合更新的用法 student表 class表 1. 执行 UPDATE student s , class c SET s.class_name='test00',c.stu_name='test00' WHERE s.class_id = c.id student表 class表 2. 执行 UPDATE student s JOIN class c ON s.class_id = c.id SET
随机推荐
- VueJs与ReactJS和AngularJS的异同点
- VBS编程教程 (第4篇)
- javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
- 解读JavaScript中 For, While与递归的用法
- python使用cPickle模块序列化实例
- DataGridView带图标的单元格实现代码
- js浏览器滚动条卷去的高度scrolltop(实例讲解)
- Shell脚步攻略之管道重定向基础
- 使用Ajax或Easyui等框架时的Json-lib的处理方案
- 浅析c#中如何在form的webbrowser控件中获得鼠标坐标
- ASP也使用ORM,给ASP上所有的SQL注入画上句号
- 详解Spring MVC事务配置
- jQuery 常见小例汇总
- jQuery实现数字加减效果汇总
- Javascript 链式调用实现代码(参考jquery)
- JavaScript中json使用自己总结
- 如何防止回车(enter)键提交表单
- 关于代理名下用户消费的问答
- 详解C++编程中的输入输相关的类和对象
- c# 可选参数、命名参数