思考: 大家可以思考一下下麵sql語句寫的有沒有問題? select jg.id as goodsId,jm.name,... from jdy_merchant jm left outer join jdy_express_template jet on jet.id = jg.freight l ...
思考:
大家可以思考一下下麵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 !!!