久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么在mysql中使用多個left join連接查詢

157次閱讀
沒有評論

共計 2749 個字符,預計需要花費 7 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這期內容當中丸趣 TV 小編將會給大家帶來有關怎么在 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
 (
 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
 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 秒

上述就是丸趣 TV 小編為大家分享的怎么在 mysql 中使用多個 left join 連接查詢了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計2749字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 望都县| 周口市| 开封市| 梧州市| 岢岚县| 龙门县| 宁乡县| 垣曲县| 新民市| 广南县| 无棣县| 台湾省| 宿松县| 嘉峪关市| 商城县| 吴堡县| 喀什市| 莱西市| 城口县| 西盟| 土默特左旗| 伊宁县| 枣强县| 贵州省| 洮南市| 鄂托克旗| 嵩明县| 凤台县| 申扎县| 南和县| 新巴尔虎右旗| 崇阳县| 余庆县| 云浮市| 汉寿县| 尤溪县| 阳城县| 遵义市| 根河市| 皋兰县| 平湖市|