2
第一個查詢工作得很好。它從表'路線點'返回一行。它有一個特定的'route_id','geo_distance()'在給定參數時處於最小值。我知道FROM部分中的子查詢似乎不必要的複雜,但在我看來,它有助於突出第二個查詢的問題。MYSQL:如何正確使用子查詢中的外部別名?
區別在最後兩行。
SELECT rp.*
FROM routepoint rp, route r, (SELECT * FROM ride_offer WHERE id = 6) as ro
WHERE rp.route_id = r.id
AND r.id = ro.current_route_id
AND geo_distance(rp.lat,rp.lng,52372070,9735690) =
(SELECT MIN(geo_distance(lat,lng,52372070,9735690))
FROM routepoint rp1, ride_offer ro1
WHERE rp1.route_id = ro1.current_route_id AND ro1.id = 6);
下一個查詢根本不起作用。它完全凍結MySQL,我必須重新啓動。 我在做什麼錯?第一個子查詢返回一行。我不明白區別。
SELECT rp.*
FROM routepoint rp, route r, (SELECT * FROM ride_offer WHERE id = 6) as ro
WHERE
rp.route_id = r.id
AND r.id = ro.current_route_id
AND geo_distance(rp.lat,rp.lng,52372070,9735690) =
(SELECT MIN(geo_distance(lat,lng,52372070,9735690))
FROM routepoint rp1
WHERE rp1.route_id = ro.current_route_id);
路線點表有多大?另外,您是否比較了兩個陳述的執行計劃? –
您正在嘗試編寫依賴子查詢 - 子查詢將在外部查詢結果集的每一行執行一次,如果您有很多行,這將會非常慢 - 您會希望儘可能多地優化子查詢盡你所能。 – Romain
@Klas路線點表有大約14k行,它會變得更大。 – Nielow