mysql查询时需要连接多个表时,比如查询订单的商品表,需要查询商品的其他信息,其他信息不在订单的商品表,需要连接其他库的表,但是连接的条件基本都是商品ID就可以了,先给一个错误语句(查询之间的嵌套,效率很低):

SELECTA.order_id,A.wid,A.work_name,A.supply_price,A.sell_price,A.total_num,A.sell_profit,A.sell_percent,A.goods_id,A.goods_name,A.classify,B.gb_name
FROM(SELECTA.sub_order_id AS order_id,A.photo_id AS wid,A.photo_name AS work_name,A.supply_price,A.sell_price,sum(A.num) AS total_num,(A.sell_price - A.supply_price) AS sell_profit,(A.sell_price - A.supply_price) / A.sell_price AS sell_percent,A.goods_id,A.goods_name,B.goods_name AS classifyFROMorder_goods AS ALEFT JOIN (SELECTA.goods_id,A.parentid,B.goods_nameFROMtest_qyg_goods.goods AS ALEFT JOIN test_qyg_goods.goods AS B ON A.parentid = B.goods_id) AS B ON A.goods_id = B.goods_idWHEREA.createtime >= '2016-09-09 00:00:00'AND A.createtime <= '2016-10-16 23:59:59'AND FROM_UNIXTIME(UNIX_TIMESTAMP(A.createtime),'%Y-%m-%d') != '2016-09-28'AND FROM_UNIXTIME(UNIX_TIMESTAMP(A.createtime),'%Y-%m-%d') != '2016-10-07'GROUP BYA.photo_idORDER BYA.goods_id ASC) AS A
LEFT JOIN (SELECTA.wid,A.brand_id,B.gb_nameFROMtest_qyg_user.buser_goods_list AS ALEFT JOIN test_qyg_supplier.brands AS B ON A.brand_id = B.gbid
) AS B ON A.wid = B.wid

查询结果耗时4秒多,explain分析,发现其中2个子查询是全部扫描,可以使用mysql的多个left join优化

SELECTA.sub_order_id,A.photo_id AS wid,A.photo_name AS work_name,A.supply_price,A.sell_price,sum(A.num) AS total_num,(A.sell_price - A.supply_price) AS sell_profit,(A.sell_price - A.supply_price) / A.sell_price AS sell_percent,A.goods_id,A.goods_name,B.parentid,C.goods_name AS classify,D.brand_id,E.gb_name,sum(CASEWHEN F.buy_type = 'yes' THENA.numELSE0END) AS total_buy_num,sum(CASEWHEN F.buy_type = 'yes' THENA.numELSE0END * A.sell_price) AS total_buy_money,sum(CASEWHEN F.buy_type = 'no' THENA.numELSE0END) AS total_give_num,sum(CASEWHEN F.buy_type = 'no' THENA.numELSE0END * A.sell_price) AS total_give_money
FROMorder_goods AS A
LEFT JOIN test_qyg_goods.goods AS B ON A.goods_id = B.goods_id
LEFT JOIN test_qyg_goods.goods AS C ON B.parentid = C.goods_id
LEFT JOIN test_qyg_user.buser_goods_list AS D ON A.photo_id = D.wid
LEFT JOIN test_qyg_supplier.brands AS E ON D.brand_id = E.gbid
LEFT JOIN order_info_sub AS F ON A.sub_order_id = F.order_id
WHEREA.createtime >= '2016-09-09 00:00:00'
AND A.createtime <= '2016-10-16 23:59:59'
AND FROM_UNIXTIME(UNIX_TIMESTAMP(A.createtime),'%Y-%m-%d'
) != '2016-09-28'
AND FROM_UNIXTIME(UNIX_TIMESTAMP(A.createtime),'%Y-%m-%d'
) != '2016-10-07'
GROUP BYA.photo_id
ORDER BYA.goods_id ASC

查询结果耗时0.04秒

mysql多个left join相关推荐

  1. Mysql 优化器内部JOIN算法hash join On-Disk Hash Join Grace Hash Join Hybrid hash join过程详解

    Mysql 各种hash join算法讲解 hash join的概述 提到hash join之前自然得说Nest loop join,以两个表的关联为例,它其实是个双层循环,先遍历外层的表(n条),再 ...

  2. mysql left outer join_关于mysql中的left join和left outer join的区别

    关于mysql中的left join和left outer join的区别 LEFT JOIN是LEFT OUTER JOIN的简写版; 内连接(INNER JOIN) :只连接匹配的行; 左外连接( ...

  3. MySQL查询优化之七-左Join 和右Join 优化(Left Join and Right Join Optimization)

    MySQL查询优化之七-左Join 和右Join 优化(Left Join and Right Join Optimization) 如需转载请标明出处:http://blog.csdn.net/it ...

  4. MySQL 8.0 hash join有重大缺陷?

    我并不这么看. 友情提醒:本文建议在PC端阅读. 徐春阳老师发文爆MySQL 8.0 hash join有重大缺陷. 文章核心观点如下:多表(比如3个个表)join时,只会简单的把表数据量小的放在前面 ...

  5. MySQL的7种join,交集,并集,差集。

    MySQL的7种join,交集,并集,差集. 1.总括 mysql种共有7种join(但实际上只有4种主要的:左外连接,右外连接,内连接,全外连接)以下7种不过在此基础上有一些变动: 2.具体实现 ( ...

  6. MySQl 如何实现 FULL JOIN?

    MySQl 不支持FULL JOIN ,那我们如何在MySQl 实现FULL 功能呢? 通过UNION 来实现 FULL JOIN: SELECT * FROM a LEFT JOIN b ON a. ...

  7. mysql update in_mysql update join优化update in查询效率

    数据库版本:5.6.16 update in 修改数据,结果执行时间过慢,一直不出结果. SQL语句及执行计划如下: UPDATE erp_order_extra SET last_time=1231 ...

  8. php join a.id b.id,mysql,sql_MySQL A left join B on B.cid=A.id 左链接查询失败,求解,mysql,sql - phpStudy...

    MySQL A left join B on B.cid=A.id 左链接查询失败,求解 mysql> desc fb_category; +-------+-------------+---- ...

  9. Mysql 优化器内部JOIN算法hash join Nestloopjoin及classic hash join CHJ过程详解

    Mysql hash join之classic hash join CHJ过程详解 hash join的历史 优化器里的hash join算法在SQL Server.Oracle.postgress等 ...

  10. mysql中的各种join整理

    Join可以分为两种 ①implicit join ②explicit join 举例如下: 类型 SQL举例 explicit join SELECT * FROM A a JOIN B b ON ...

最新文章

  1. 【Flutter】StatefulWidget 组件 ( PageView 组件 )
  2. 机器学习——深度学习(Deep Learning)经典资料
  3. Testing for SSL renegotiation
  4. 判断一个图中有无环路的存在
  5. VB讲课笔记12:文件管理
  6. 删除一行下方单元格上移_Excel小技巧——局部单元格的添加与删除
  7. 性能测试之JMeter主页面布局
  8. java 中的wait notify
  9. 数据结构(字符串)—— 循环旋转字符串的判断
  10. 《Ray Tracing in One Weekend》——Chapter 2: The vec3 class
  11. qlv是什么格式的视频,怎么把qlv格式转换成mp4
  12. 智能家居内网服务器,手把手教你搭建自己的智能家居IOT系统
  13. environment-modules安装配置
  14. 刚学会短视频剪辑的看过来,剪辑顺序你得懂,上手容易效果好
  15. 【操作系统】LinuxKernel-VFS虚拟文件系统 认知框架构建(super_block,inode,dentry,file)
  16. 软件测试实验1 — Junit 安装与 triangle problem 的测试
  17. matlab--GUI 如何实现打开图片
  18. 深圳内推 | 粤港澳大湾区数字经济研究院招聘计算机视觉算法工程师
  19. win11英文版安装中文输入法中文语言包切换到中文版
  20. 从0到1搭建属于自己的服务器

热门文章

  1. 不规则形状 前端_精度提升第一步:形状各异测区的像控点布设方案
  2. 实战HTML:登陆界面的实现
  3. linux需要4k对齐么,linux查看硬盘4K对齐方法
  4. mysql中dint_mysql常用操作——数据库和表的操作1(共2页)
  5. c语言课设代写一般多少钱_海南彩礼钱一般给多少 海南娶媳妇要多少钱
  6. 超快的HTML5 2D渲染引擎Pixi.js入门
  7. 论文笔记_S2D.73_ICCV2021_单目深度估计的可解释深度网络研究
  8. 斯坦福大学深度学习公开课cs231n学习笔记(2)线性分类器及最优化
  9. 3D Bounding Box Estimation Using Deep Learning and Geometry
  10. 如何使用 DefaultServlet DefaultServletHttpRequestHandler 来处理静态资源