202110-01 解决Mysql的left join无效及使用的注意事项说明 Mysql的leftjoin无效及使用今天写sql发现使用leftjoin没有把左边表的数据全部查询出来,让我郁闷了一会,后来仔细研究了一会才知道自己犯了个常识性的错误(我是菜鸟)这是原sql这样的查询并不能将tb_line这张表的数据都查询出来,好尴尬...后面我才知道原来当我们进行多表查询,在执行到where之前,会先形成一个临时表而on就是临时表中的条件筛选,使用leftjoin则不管条件是否为真,都会查询出左边表的数据,条件为假的,则显示... 继续阅读 >
202109-30 mysql left join快速转inner join的过程 在日常优化过程中,发现一个怪事情,同一个SQL出现两个完全不一样执行计划,leftjoin连驱动表都可以变成不一样。对于leftjoin,如果where条件里有被关联表过滤,leftjoin有可能被转成innerjoin,本案例中shopInfo有ShopCategory='LOC'过滤条件;保证shopInfo的记录非NULL,因此leftjoin在优化过程中可以转为innerjoin。那么O和S的JOIN顺序就是可以交换的。验证结论:创建表:--班级表CREATETABLET_CLASS(class_idi... 继续阅读 >
202108-26 mysql高效查询left join和group by(加索引) mysql高效查询mysql牺牲了groupby来增加leftjoin的速度(前提是加了索引)。user表:10万数据实例1:200秒左右SELECTU.id,A.favorite_countFROM(SELECTidfromuser)ULEFTJOIN(--点赞数SELECTfavorite_byASuser_id,SUM(favorite_count)ASfavorite_countFROMfavoriteGROUPBYfavorite_by)AONU.id=A.user_idLEFTJOIN(--评论数量SELECTuser_id,COUNT(*)AScomment_countFROMphoto_comme... 继续阅读 >
202102-21 详解mysql 使用left join添加where条件的问题分析 当前需求:有group和factor两张表,一个group对应多个factor,现在想查询有效的group和对应的有效的factor,两个表都有isDel逻辑删除标志。最开始的错误写法一:SELECTg.*,f.*FROMgroupsgLEFTJOINfactorfONf.groupId=g.idwhereg.isDel=0andf.isDel=0LEFTJOIN关键字会从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。上边这样写左边表要是在右边表没有对应数据是查询不出来的... 继续阅读 >
202101-17 inner join和left join之间的区别详解 前言关于innerjoin与leftjoin之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在innerjoin上了。需求是从数据库查数据,在前端以柱形图的形式展现出来,查到的数据按行业分组,显示每个行业的户数及户数占比,涉及到的字段有A表的用户数、总用户数和B表的行业名称。本来是不管查不查的到数据,在X轴都应该显示行业名称的,结果是X、Y轴都没有任何数据显示。问题就是我用错了联结... 继续阅读 >
202010-10 Mysql join连接查询的语法与示例 连接查询:是将两个查询(或表)的每一行,以“两两横同对接”的方式,所得到的所有行的结果,即一个表中的某行,跟另一个表中的某行。进行“横向对接”,得到一个新行。连接查询包括以下这些不同形式,连接方式:交叉连接、内连接、外连接(分:左外连接,右外连接)连接查询语法:select*from表名[连接方式]join表名[on连接条件]where...;测试数据:mysql>select*fromtest;+----+--------+------+------+|id|name|se... 继续阅读 >
202010-10 sql优化实战 把full join改为left join +union all(从5分钟降为10秒) 今天收到一个需求,要改写一个报表的逻辑,当改完之后,再次运行,发现运行超时。因为特殊原因,无法访问客户的服务器,没办法查看sql的执行计划、没办法知道表中的索引情况,所以,尝试从语句的改写上来优化。一、原始语句如下:selectisnull(vv.customer_id,v.customer_id)ascustomer_id,isnull(vv.business_date,replace(v.business_date,'-',''))asbusiness_date,v.prod_id,v.sales,vv.visit_count,v.all_sal... 继续阅读 >
202009-29 MySQL联表查询基本操作之left-join常见的坑 概述对于中小体量的项目而言,联表查询是再常见不过的操作了,尤其是在做报表的时候。然而校对数据的时候,您发现坑了吗?本篇文章就mysql常用联表查询复现常见的坑。基础环境建表语句DROPTABLEIFEXISTS`role`;CREATETABLE`role`(`id`int(11)NOTNULLAUTO_INCREMENT,`role_name`VARCHAR(50)DEFAULTNULLCOMMENT'角色名',PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='角色表';insertinto... 继续阅读 >
201504-26 多表数据连接 Left join 一个我写的实例:其中多表连接,一共连接了3个表。使用聚集函数SUM,用到了GROUPBYSELECT a.[UserID],b.[Name],sum (c.[Money]+c.[Bank])as TotalMoneyFROM Table1 a(nolock) LEFT JOIN Table2 b(nolock) on a.[UserID] = b.[UserID] LEFT JOIN Table3 c(nolock) ON b.[UserID]=c.[UserID] WHERE a.[Use... 继续阅读 >