mysql多個(gè)left join連接查詢用法分析
本文實(shí)例講述了mysql多個(gè)left join連接查詢用法。分享給大家供大家參考,具體如下:
mysql查詢時(shí)需要連接多個(gè)表時(shí),比如查詢訂單的商品表,需要查詢商品的其他信息,其他信息不在訂單的商品表,需要連接其他庫(kù)的表,但是連接的條件基本都是商品ID就可以了,先給一個(gè)錯(cuò)誤語句(查詢之間的嵌套,效率很低):
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
查詢結(jié)果耗時(shí)4秒多,explain分析,發(fā)現(xiàn)其中2個(gè)子查詢是全部掃描,可以使用mysql的多個(gè)left join優(yōu)化
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
查詢結(jié)果耗時(shí)0.04秒
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過程技巧大全》及《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。
- 圖文詳解Mysql使用left?join寫查詢語句執(zhí)行很慢問題的解決
- mysql使用left?join連接出現(xiàn)重復(fù)問題的記錄
- MySQL中多個(gè)left?join?on關(guān)聯(lián)條件的順序說明
- 關(guān)于mysql?left?join?查詢慢時(shí)間長(zhǎng)的踩坑總結(jié)
- MYSQL Left Join優(yōu)化(10秒優(yōu)化到20毫秒內(nèi))
- 解決Mysql的left join無效及使用的注意事項(xiàng)說明
- mysql left join快速轉(zhuǎn)inner join的過程
- mysql高效查詢left join和group by(加索引)
- 詳解mysql 使用left join添加where條件的問題分析
- mysql中l(wèi)eft join設(shè)置條件在on與where時(shí)的用法區(qū)別分析
- MySQL 8.0.18 Hash Join不支持left/right join左右連接問題
- MySQL left join操作中on和where放置條件的區(qū)別介紹
- MySQL利用profile分析慢sql詳解(group left join效率高于子查詢)
- MySQL在右表數(shù)據(jù)不唯一的情況下使用left join的方法
- MySQL表LEFT JOIN左連接與RIGHT JOIN右連接的實(shí)例教程
- mysql left join的基本用法以及on與where的區(qū)別
相關(guān)文章
一文了解MySQL Optimizer Trace的神奇功能
這篇文章主要為大家介紹了一文了解MySQL Optimizer Trace的神奇功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
有關(guān)mysql中sql的執(zhí)行順序的小問題
在MySQL中我們可能會(huì)遇到一些關(guān)于執(zhí)行順序的問題,下面小編就來帶大家了解一下原因以及如何解決2019-05-05
mysql配置連接參數(shù)設(shè)置及性能優(yōu)化
這篇文章主要介紹了mysql配置連接參數(shù)設(shè)置及性能優(yōu)化,主要介紹配置信息的說明和性能優(yōu)化,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05
MySQL與PHP的基礎(chǔ)與應(yīng)用專題之自連接
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,本系列將帶你掌握php與mysql的基礎(chǔ)應(yīng)用,本篇從自連接開始2022-02-02
MYSQL必知必會(huì)讀書筆記第四章之檢索數(shù)據(jù)
MySQL是一種開放源代碼的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)。接下來通過本文給大家介紹MYSQL必知必會(huì)讀書筆記第四章之檢索數(shù)據(jù),感興趣的朋友一起學(xué)習(xí)吧2016-05-05
Mysql深入探索之Explain執(zhí)行計(jì)劃詳析
這篇文章主要給大家介紹了關(guān)于Mysql深入探索之Explain執(zhí)行計(jì)劃的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
MySql中的json_extract函數(shù)處理json字段詳情
這篇文章主要介紹了MySql中的json_extract函數(shù)處理json字段詳情,利用json_extract函數(shù)可以通過key查詢value值的一個(gè)介紹展開相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-06-06

