Использование результата первого оператора select в другой и сохранение результата в другую таблицу

#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