#mysql #sql
#mysql #sql
Вопрос:
После долгого чтения я написал эти 3 sql-инструкции, и я хочу автоматизировать и объединить эти 3 sql-инструкции.
select longitude,latitude from roadData;
SELECT geo_coordinates_latitude, geo_coordinates_longitude,
( 3959 * acos( cos( radians('-37.964637158') ) * cos( radians( geo_coordinates_latitude ) ) *
cos( radians( geo_coordinates_longitude ) - radians('144.408476215') ) sin( radians('-37.964637158') ) *
sin( radians( geo_coordinates_latitude ) ) ) ) AS distance
FROM tweetmelbourne HAVING distance < .1 ORDER BY distance LIMIT 0 , 20;
Insert into roadTweets(longitude,latitude) values(144.408476215,-37.964637158);
**
По сути, я хочу выбрать все координаты из roadData один за другим, а затем найти все точки в tweetMelbourne в пределах 20 миль от него и вставить эти точки в другую таблицу.
**
описание tweetmelbourne;
опишите roadData;
Ответ №1:
Я не совсем уверен в этом, поэтому, пожалуйста, дайте мне знать, работает ли это:
Insert into roadTweets(longitude,latitude) values(SELECT geo_coordinates_latitude, geo_coordinates_longitude,
( 3959 * acos( cos( radians(SELECT latitude FROM roadData) ) * cos( radians( geo_coordinates_latitude ) ) *
cos( radians( geo_coordinates_longitude ) - radians(SELECT longitude FROM roadData) ) sin( radians(latitude) ) *
sin( radians( geo_coordinates_latitude ) ) ) ) AS distance
FROM tweetmelbourne HAVING distance < .1 ORDER BY distance LIMIT 0 , 20);
Комментарии:
1. Код ошибки: 1064. У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с ‘SELECT geo_coordinates_latitude, geo_coordinates_longitude, ( 3959 * acos( cos(‘ в строке 1
Ответ №2:
Я думаю, это должно быть:
select * from tweetmelbourne t, roadData r
where distance(r.longitude,r.latitude,t.geo_coordinates_longitude,t.geo_coordinates_latitude) < 20;
И либо реализуйте функцию расстояния, либо замените расстояние (r.долгота, r.широта, т.geo_coordinates_longitude, т.geo_coordinates_latitude) на формулу, вычисляющую расстояние so. В oracle вы можете использовать пакет SDO_GEOMETRY.
Комментарии:
1. Код ошибки: 1054. Неизвестный столбец ‘широта’ в ‘списке полей’
2. @kapcer я включил описание таблицы
3. Пожалуйста, попробуйте сейчас. Я отредактировал ответ. Однако логика вычисления расстояния для меня немного странная. Какое расстояние вы собираетесь вычислить?
4. я думаю, что я вас запутал. Я обновил вопрос, дайте мне знать, если вы еще не поняли.
5. Похоже, вы просто хотите выполнить перекрестное объединение тех таблиц, фильтрующих точки, расстояние между которыми меньше 20