mysql多个left join
来源:互联网 发布:苹果电脑无法卸载软件 编辑:程序博客网 时间:2024/05/15 23:52
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_nameFROM(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 ALEFT 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_moneyFROMorder_goods AS ALEFT JOIN test_qyg_goods.goods AS B ON A.goods_id = B.goods_idLEFT JOIN test_qyg_goods.goods AS C ON B.parentid = C.goods_idLEFT JOIN test_qyg_user.buser_goods_list AS D ON A.photo_id = D.widLEFT JOIN test_qyg_supplier.brands AS E ON D.brand_id = E.gbidLEFT JOIN order_info_sub AS F ON A.sub_order_id = F.order_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
查询结果耗时0.04秒
0 0
- mysql多个left join
- Mysql 多个子查询 多个LEFT JOIN 视图创建
- Mysql 多个子查询 多个LEFT JOIN 视图创建
- 多个left join 怎么执行?
- 数据库多个left join如何执行
- MySQL Left Join,Right Join
- MySQL Left Join,Right Join
- mysql left join right join
- mysql 多表连接 left join 等
- MYSQl left join 分析
- LEFT JOIN in MySQL
- mysql left join分析
- MySQL:union、left join
- MySQL LEFT JOIN
- 关于MySql Left Join
- mysql left join
- mysql left join写法
- mysql update left join
- Servlet的编译和部署
- [week8] machine learning:clustering(聚类)
- Spring文件上传
- Spring拦截器
- 为何我工作十年,内心仍无比恐慌(腾讯产品总监曹菲)
- mysql多个left join
- SpringWebService
- java中类的初始化顺序
- web应用程序状态管理
- Unity性能优化—声音优化
- 批量生成圖片預製躰,并且保留當前文件目錄
- 【目标检测:Hough Forest】hough forest目标检测原理(一)
- 解决WordExcel启动提示向程序发送命令出现问题
- 文章标题