怎么在mysql中使用多个left join连接查询
发表于:2025-01-28 作者:千家信息网编辑
千家信息网最后更新 2025年01月28日,这期内容当中小编将会给大家带来有关怎么在mysql中使用多个left join连接查询,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。mysql查询时需要连接多个表时
千家信息网最后更新 2025年01月28日怎么在mysql中使用多个left join连接查询
这期内容当中小编将会给大家带来有关怎么在mysql中使用多个left join连接查询,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
mysql查询时需要连接多个表时,比如查询订单的商品表,需要查询商品的其他信息,其他信息不在订单的商品表,需要连接其他库的表,但是连接的条件基本都是商品ID就可以了,先给一个错误语句(查询之间的嵌套,效率很低):
SELECT A.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 ( SELECT A.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 classify FROM order_goods AS A LEFT JOIN ( SELECT A.goods_id, A.parentid, B.goods_name FROM test_qyg_goods.goods AS A LEFT JOIN test_qyg_goods.goods AS B ON A.parentid = B.goods_id ) AS B ON A.goods_id = B.goods_id WHERE A.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 BY A.photo_id ORDER BY A.goods_id ASC ) AS ALEFT JOIN ( SELECT A.wid, A.brand_id, B.gb_name FROM test_qyg_user.buser_goods_list AS A LEFT 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
优化
SELECT A.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( CASE WHEN F.buy_type = 'yes' THEN A.num ELSE 0 END ) AS total_buy_num, sum( CASE WHEN F.buy_type = 'yes' THEN A.num ELSE 0 END * A.sell_price ) AS total_buy_money, sum( CASE WHEN F.buy_type = 'no' THEN A.num ELSE 0 END ) AS total_give_num, sum( CASE WHEN F.buy_type = 'no' THEN A.num ELSE 0 END * A.sell_price ) AS total_give_moneyFROM order_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_idWHERE A.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 BY A.photo_idORDER BY A.goods_id ASC
查询结果耗时0.04秒
上述就是小编为大家分享的怎么在mysql中使用多个left join连接查询了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
查询
多个
商品
分析
信息
内容
结果
订单
专业
个子
中小
之间
内容丰富
就是
效率
文章
更多
条件
知识
篇文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发案件调查
宁波无线网络技术创新服务
网络安全集体学习
导入数据库 有空格
数据库的语法
杭州服务器配置公司
网络安全月方案
怎么使用数据库写入系统
vba数据上传数据库
中国最新网络安全形势
安装黑群晖找不到服务器
如何更换dns服务器
何为电子商务网络技术
蔓延旅行服务器ip
网络安全实验室装修
飞机聊天软件服务器地址
查看所有的数据库指令
企业网络安全防护1 x证书
什么不是sql数据库对象
青岛幼儿园早教软件开发
濮阳市网络安全宣传
深圳市网络安全协会会员单位
数据库第四章安全性
软件开发税负计算
朝阳区品质软件开发价格信息
智慧水利软件开发会遇到什么问题
更改服务器ip地址
物业公司网络安全管理制度
企业微信服务器
视易通娱服务器型号