SQL-запрос на основе отношений - PullRequest
0 голосов
/ 07 ноября 2018

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

User
id

и

Region
id, userID, origin (Geometry('point')), radius (Double)

Пользователь имеет непосредственное отношение к региону.

Я хочу запросить всех пользователей, у которых есть регион, содержащий точку (широта и долгота). Чтобы определить contains, если расстояние между данной точкой и region.origin меньше region.radius, тогда эта область содержит точку.

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

SELECT "id", "origin", "radius", "regionID", ST_Distance("origin", ST_MakePoint(?, ?), false) AS "distance" 
FROM "regions" AS "region" 
WHERE 
  ST_DWithin("origin", ST_MakePoint(lat, long), maxDistance, false) = true
AND 
  ST_Distance("origin", ST_MakePoint(lat, long), false) - radius <= 0
ORDER BY distance ASC
LIMIT 10;

Но я действительно хочу пользователей и регионы и не хочу опрашивать каждого пользователя индивидуально в зависимости от региона. Вот что у меня есть:

SELECT * 
FROM user, regions as region 
WHERE 
  user.id = region.userID
AND 
  ST_DWithin("origin", ST_MakePoint(lat, long), maxDistance, false) = true 
AND 
  ST_Distance("origin", ST_MakePoint(lat, long), false) - radius <= 0 
LIMIT 10;

С этим запросом я не получаю никаких результатов, по первому запросу я получаю результаты.

...