最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

mysql多个leftjoin连接查询用法分析

来源:懂视网 责编:小采 时间:2020-11-09 20:25:23
文档

mysql多个leftjoin连接查询用法分析

mysql多个leftjoin连接查询用法分析:本文实例讲述了mysql多个left join连接查询用法。分享给大家供大家参考,具体如下: mysql查询时需要连接多个表时,比如查询订单的商品表,需要查询商品的其他信息,其他信息不在订单的商品表,需要连接其他库的表,但是连接的条件基本都是商品ID就可以了,
推荐度:
导读mysql多个leftjoin连接查询用法分析:本文实例讲述了mysql多个left join连接查询用法。分享给大家供大家参考,具体如下: mysql查询时需要连接多个表时,比如查询订单的商品表,需要查询商品的其他信息,其他信息不在订单的商品表,需要连接其他库的表,但是连接的条件基本都是商品ID就可以了,

本文实例讲述了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_name
FROM
 (
 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 A
LEFT 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_money
FROM
 order_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
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

查询结果耗时0.04秒

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》

希望本文所述对大家MySQL数据库计有所帮助。

您可能感兴趣的文章:

  • MySQL中基本的多表连接查询教程
  • 详解MySQL中的分组查询与连接查询语句
  • mysql连接查询(左连接,右连接,内连接)
  • MySQL查询优化:连接查询排序浅谈
  • MySQL笔记之连接查询详解
  • MySQL优化之使用连接(join)代替子查询
  • MySQL查询优化:用子查询代替非主键连接查询实例介绍
  • 经典mysql连接查询例题
  • MySQL中对表连接查询的简单优化教程
  • mysql多表连接查询实例讲解
  • MySQL连接查询实例详解
  • Mysql自连接查询实例详解
  • 文档

    mysql多个leftjoin连接查询用法分析

    mysql多个leftjoin连接查询用法分析:本文实例讲述了mysql多个left join连接查询用法。分享给大家供大家参考,具体如下: mysql查询时需要连接多个表时,比如查询订单的商品表,需要查询商品的其他信息,其他信息不在订单的商品表,需要连接其他库的表,但是连接的条件基本都是商品ID就可以了,
    推荐度:
    标签: 查询 连接 用法
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top