Первый запрос работает нормально. Он возвращает одну строку из таблицы «точка маршрута». У него есть определенный 'route_id', а 'geo_distance ()' находится на минимальном уровне с учетом параметров. Я знаю, что подзапрос в разделе FROM кажется излишне сложным, но, на мой взгляд, он помогает выявить проблему со вторым запросом.
Отличия указаны в последних двух строках.
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);
TRUE
, то подзапрос будет оценен. Однако это может испортить некоторые уровни оптимизации - mysql не очень хорош в зависимых подзапросах. - person Romain   schedule 03.10.2011