我有两张桌子: 1表与点,和 1张带有多边形的桌子。
我正在寻找一个连接每个点最近的多边形的查询。
points
表如下所示:
|-id-|-name-|-location---|
|====|======|============|
|-1--|-A----|-POINT(1 0)-|
|-2--|-B----|-POINT(3 4)-|
|-3--|-C----|-POINT(2 9)-|
|-4--|-D----|-POINT(6 2)-|
polygons
表如下所示:
|-id-|-name-|-area---------------------|
|====|======|==========================|
|-1--|-A----|-POLYGON(1 0,3 4,2 9,1 0)-|
|-2--|-B----|-POLYGON(3 4,2 9,6 2,3 4)-|
|-3--|-C----|-POLYGON(2 9,6 2,1 0,2 9)-|
|-4--|-D----|-POLYGON(6 2,1 0,3 4,6 2)-|
此查询的首选输出如下所示:(虚拟数据)
|-id-|-name-|-location---|-id-|-name-|-area---------------------|
|====|======|============|====|======|==========================|
|-1--|-A----|-POINT(1 0)-|-2--|-B----|-POLYGON(3 4,2 9,6 2,3 4)-|
|-2--|-B----|-POINT(3 4)-|-3--|-C----|-POLYGON(2 9,6 2,1 0,2 9)-|
|-3--|-C----|-POINT(2 9)-|-2--|-B----|-POLYGON(3 4,2 9,6 2,3 4)-|
|-4--|-D----|-POINT(6 2)-|-1--|-A----|-POLYGON(1 0,3 4,2 9,1 0)-|
(编辑:只需执行以下.sql即可创建此架构:https://gist.github.com/badeend/dfdf826a1afbeeac5866be286a9bd30e)
我尝试了以下查询:
SELECT *, ST_DISTANCE(points.point, polygons.polygon) FROM points INNER JOIN polygons
但是,它返回所有多边形的距离,而不是仅返回最近的。
答案 0 :(得分:0)
一种简单的方法是使用ordere by和limit
SELECT *, ST_DISTANCE(points.point, polygons.polygon)
FROM points INNER JOIN polygons
order by ST_DISTANCE(points.point, polygons.polygon) asc limit 1
但您也可以使用聚合函数,如min()
您还应该使用例如:on points.col = polygons.col
为连接分配显式条件