2016-12-18 3 views
1

У меня есть UUF Uive с именем find_distance, который вычисляет координатное расстояние между парой длинномерных координат. У меня также есть таблица, содержащая список названий городов и их соответствующие координаты lat-long. Так в настоящее время, если мне нужно найти расстояние между двумя городами, скажем, Денвер и Сан-Хосе, мне нужно выполнить автообъединение:Создание вида улья

Select find_Distance(cityA.latitude, cityA.longitude, cityB.latitude, cityB.longitude) from 
(select latitude, longitude from city_data.map_info where city = 'Denver') cityA 
join 
(select latitude, longitude from city_data.map_info where city = 'San Jose') cityB; 

Как бы идти о создании мнение, что бы принимать только названия городов как параметры? Так что в итоге я мог бы просто использовать

SELECT distance from city_distance where cityA = 'Denver' and cityB = 'San Jose' 
+1

Выберите find_Distance (cityA.latitude, cityA.longitude, cityB.latitude, cityB.longitude) как расстояние, cityA.city в city1, cityB.city как city2, from (выберите широту, долготу, город из city_data.map_info) cityA присоединяйтесь к (выберите широту, долготу, город из city_data.map_info) cityB; и используйте запрос, чтобы выбрать ВЫБЕРИТЕ расстояние от city_distance, где city1 = 'Денвер' и city2 = 'Сан-Хосе' Если результаты не верны, можете ли вы делиться данными, может быть 10 строк –

+0

@RavinderKarra Я закончил использовать ваше предложение, и это работал - вы могли бы добавить его в качестве ответа :) – Craig

ответ

1

Попробуйте ВИД:

CREATE VIEW city_distance AS 
SELECT 
    cityA.city as city_from, 
    cityA.city as city_to, 
    find_Distance(cityA.latitude, cityA.longitude, cityB.latitude, cityB.longitude) as distance 
FROM 
    (SELECT city, latitude, longitude FROM city_data.map_info) cityA 
    CROSS JOIN 
    (SELECT city, latitude, longitude FROM city_data.map_info) cityB; 
+0

Я не думаю, что крест, соединяющий стол, является хорошей идеей, когда все, что вам нужно, это два города. – gobrewers14

Смежные вопросы