указать название локации, если точка его пересекает MySQL - PullRequest
0 голосов
/ 14 июля 2020

Я использую MySQL 8.0

У меня есть две таблицы: location_table, rent_table

location_tables выглядит так:

location_name    polygon 
 A                BLOB
 B                BLOB 
 ...

полигон имеет тип данных POLYGON.

rent_table выглядит так:

user_id    rent_time    rent_location   
   1           x           BLOB
   2           x           BLOB
  ...

где rent_location - это тип данных POINT

для каждой строки в rent_table Я хочу создать столбец, указывающий, какому location_name он принадлежит. Если user_id rent_location пересекает location_name = В новом столбце будет A

Это будет выглядеть примерно так:

user_id    rent_time    rent_location    location_name
   1           x           BLOB                A
   2           x           BLOB                B
  ...

Заранее спасибо!

То, что я пробовал:

Я могу делать один за другим, используя

select *
     , st_intersects(A, Point(ST_X(work_location), ST_Y(work_location))) as location_A
     , st_intersects(B, Point(ST_X(work_location), ST_Y(work_location))) as location_B 
     , st_intersects(C, Point(ST_X(work_location), ST_Y(work_location))) as location_C
 from rent_table;

Это работает, когда я заранее устанавливаю переменные A, B, C, но я хочу получить многоугольник местоположения непосредственно из location_table.

Я мог бы использовать подзапрос, как показано ниже:

select *
     , st_intersects((select polygon from location_table where location_name = 'A'), Point(ST_X(work_location), ST_Y(work_location))) as location_A
 from rent_table;

, однако у меня миллионы строк в rent_table, поэтому я не хочу, чтобы подзапрос в операторе select выполнялся для каждой из миллионов строк.

1 Ответ

1 голос
/ 14 июля 2020

Вы можете сделать:

select
  r.*, 
  l.location_name
from rent r
left join location l on ST_CONTAINS(l.polygon, r.rent_location)
...