Мне нужна помощь в соединении двух столов.У меня есть:
my_type_table
, который имеет столбцы:
- тип (VARCHAR)
- широта (десятичная)
- долгота (десятичное число)
... и neighborhood_shapes
, в котором есть столбцы:
- окрестности (VARCHAR)
- окрестности_полигонов (геометрия)
У меня есть функция с именем myWithin
, которая проверяет широту и долготу, чтобы увидеть, находятся ли они в многоугольнике соседства.Он принимает широту и форму окрестности в качестве параметров.Функция myWithin
возвращает 0, если точка не в многоугольнике, и 1, если она находится внутри многоугольника.
Я могу сделать оператор выбора следующим образом:
SELECT type, latitude, longitude, 'Newport' AS neighborhood
FROM my_type_table
WHERE myWithin(POINTFROMTEXT( CONCAT( 'POINT(', latitude, ' ', longitude, ')' ) ) ,
(SELECT neighborhood_shapes.neighborhood_polygons
FROM neighborhood_shapes
WHERE neighborhood_shapes.neighborhoods = 'Newport')) = 1
Результатыиз этого выбора, например:
type | latitude | longitude | neighborhood
---------------------------------------------
small | 30.3030 | -70.7070 | Newport
Моя проблема в том, что у меня много окрестностей.Я не хочу каждый раз вводить окрестности.Есть ли способ удалить "Ньюпорт"?По сути, я хочу, чтобы функция выполнялась в каждой точке и давала мне тип, широту, долготу и окрестность, в которой находится точка?
Я мог бы скопировать приведенный выше оператор выбора и объединить операторы выбора с помощью UNION ALLно это был бы кошмар, набравший название каждого района.Должен быть лучший способ.
Есть предложения?