思考:
大家可以思考一下下面sql陳述句寫的有沒有問題?
select jg.id as goodsId,jm.name,... from jdy_merchant jm left outer join jdy_express_template jet on jet.id = jg.freight left outer join jdy_goods jg on jm.id = jg.store_id where jg.id = 1
甭管有沒有,運行一下見分曉:
Unknown column 'jg.freight' in 'on clause'
嗯哼? 問題來了,表里明明有這個欄位為什么還會找不到這一列呢?
這里就要說一下sql查詢陳述句的執行順序問題了:
分析:
sql查詢陳述句中的執行順序為:
from : 從哪個表查詢資料 必須關鍵字
on : 關聯條件
join : 關聯表
where : 過濾條件
group by : 將過濾后的資料進行分組
having : 將分組后的資料再次進行過濾
select :查詢的列
order by : 將最終的查詢結果進行排序
最后將查詢的結果進行回傳
接下來分析下上面的陳述句:
執行from 關聯的表,這里有三個表,jdy_merchant jm,jdy_express_template jet,jdy_goods jg
這三張表是按on指定的條件將left join后面的表附加到前面表之后的,
第一張表肯定沒有問題,到left outer join jdy_express_template jet on jet.id = jg.freight這一句的時候就出現問題了
大家看一下關聯條件 jet.id = jg.freight ,這時候前面還沒有jdy_goods jg這張表,所以參考jg.freight就報錯了
怎么改呢:
把關聯表顛倒一下順序就可以了,像這樣:
select jg.id as goodsId,jm.name from jdy_merchant jm left outer join jdy_goods jg on jm.id = jg.store_id left outer join jdy_express_template jet on jet.id = jg.freight where jg.id = 1
執行結果:


自己挖的坑哭著也要填完
END !!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/44467.html
標籤:MySQL
下一篇:MySQL——創建資料庫與表
