基于关系的SQL查询

时间:2018-11-07 03:10:25

标签: postgresql relational-database postgis database-administration

我有两个表:

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;

通过此查询,我没有任何结果,在第一个查询中,我得到了结果。

0 个答案:

没有答案