Вопрос SQL: выберите расстояние города без дубликатов - PullRequest
2 голосов
/ 27 июля 2010

У меня есть таблица со столбцами: city, x, y

Мне нужно выбрать расстояние между всеми городами без дубликатов, результаты должны выглядеть следующим образом: city1, city2, distance

но я не должен получать city2, city1, distance (так как я уже получил расстояние между этими городами ...

какой правильный запрос SQL для этого ... спасибо!

Ответы [ 3 ]

4 голосов
/ 27 июля 2010
SELECT c1.City, c2.City, dbo.CalcDistance(c1.x, c1.y, c2.x, c2.y)
FROM Cities c1, Cities c2
WHERE c1.CityID > c2.CityID 
2 голосов
/ 27 июля 2010
SELECT
    C1.city,
    C2.city,
    <distance calculation>
FROM
    Cities C1
INNER JOIN Cities C2 ON
    C2.city_id > C1.city_id

Я оставил расчет расстояния пустым, так как это зависит от того, делаете ли вы «по прямой линии», используете ли вы уличные маршруты, учитывает ли кривизна земли и т. Д.

1 голос
/ 27 июля 2010

То, что вы пытаетесь сделать, называется «промежуточным итогом».

Будьте осторожны с треугольными соединениями, такими как ON c1.CityID > c2.CityID, они создают декартово произведение!(Я не хочу спорить с чьим-либо ответом.)

Взгляните на лучшую в мире статью Джеффа Модена о беговых итогах: Решение проблем "Промежуточный итог" и "Порядковый ранг" (переписано)) .

Если у вас нет учетной записи, вам придется ее создать (требуется только адрес электронной почты).Тем не менее, я обещаю, что это стоит!

...