大家好,現在有兩個表,主表Mstb_Order_Header和右表mstb_order_header_extend_atl,兩個表用order_number關聯起來,但是右表的order_number可能對應多條記錄,這多條記錄的carrier_type值其實是同一個,只要取其中一條的carrier_type值就好了。下面是SQL
第一條SQL
select oh.*,hea.carrier_type from Mstb_Order_Header oh
left join (select order_number,max(carrier_type) as carrier_type from mstb_order_header_extend_atl group by order_number) hea
on oh.order_number = hea.order_number;
第二條SQL
select oh.*,hea.carrier_type from Mstb_Order_Header oh
left join (select order_number,carrier_type from mstb_order_header_extend_atl where rownum = 1) hea
on oh.order_number = hea.order_number;
現在發現兩條SQL都能滿足業務需求,我不明白的是第二條SQL,我理解的第二條SQL,右表應該是只要一條記錄和主表匹配,就是應該先執行了select order_number,carrier_type from mstb_order_header_extend_atl where rownum = 1 在和主表關聯。
兩條SQL的執行計劃如下:
第一條

第二條

我想問一下具體執行的邏輯如何理解?
uj5u.com熱心網友回復:
這兩條陳述句,并不等價;uj5u.com熱心網友回復:
兩條陳述句 并不能達到一樣的效果轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/96363.html
標籤:開發
