Я использую 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 выполнялся для каждой из миллионов строк.