国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql多個left join連接查詢用法分析

2024-07-25 19:08:40
字體:
來源:轉載
供稿:網友

本文實例講述了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數據庫計有所幫助。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新余市| 琼中| 班玛县| 明光市| 霍城县| 祁东县| 盐山县| 乐平市| 丹阳市| 西畴县| 陇川县| 新蔡县| 巴塘县| 阿克陶县| 昂仁县| 兰州市| 韶山市| 宾川县| 乌海市| 浏阳市| 石泉县| 车险| 伊川县| 双流县| 牡丹江市| 将乐县| 延川县| 安新县| 大安市| 华亭县| 锡林浩特市| 鹰潭市| 绥中县| 大丰市| 正阳县| 三江| 抚松县| 西乌珠穆沁旗| 行唐县| 鸡东县| 中山市|