Sql 对于表的每一行,使用另一个表的每一行运行函数
我有一个类型为Sql 对于表的每一行,使用另一个表的每一行运行函数,sql,google-bigquery,Sql,Google Bigquery,我有一个类型为地理的点表,称之为T\u点: id point 1 POINT(-73.964736938476562, 40.7670783996582) 2 POINT(-73.962371826171875, 40.773128509521484) 3 POINT(-73.989463806152344, 40.767578125) 4 POINT(-73.978683471679688, 40.765167236328125) ... 还有一个多边形表
地理
的点表,称之为T\u点
:
id point
1 POINT(-73.964736938476562, 40.7670783996582)
2 POINT(-73.962371826171875, 40.773128509521484)
3 POINT(-73.989463806152344, 40.767578125)
4 POINT(-73.978683471679688, 40.765167236328125)
...
还有一个多边形表,也是地理类型
,称之为T_zones
:
id zone
1 POLYGON((-74.1856319999999 40.6916479999999, -74.185911 40.6914499999999, ... ))
3 POLYGON((-73.848596761 40.8716707849999, -73.849876452 40.8721018809999, ... ))
18 POLYGON((-73.8844286139999 40.8668003789999, -73.883625181 40.8672575879999, ... ))
20 POLYGON((-73.8839239579998 40.8644177609999, -73.883960024 40.8645497189999, ... ))
...
使用功能ST_cover
我可以通过以下方式确定点X是否位于区域Y中:
ST_COVERS(POLYGON((-73.8839239579998 40.8644177609999, -73.883960024 40.8645497189999, ... )),
POINT(-73.964736938476562, 40.7670783996582),
)
如果该函数在区域中,则返回TRUE
;如果不在区域中,则返回FALSE
目标:找出每个点所在的区域
如何操作:对于T\u点中的每个点
运行此T\u区域中的每个区域
,并返回点所在区域的T\u区域.id
有人能推荐一种有效的实施方法吗
差不多
SELECT get_zone_id(point, T_zones.zones)
FROM T_points
很理想,但不知道如何做到这一点
理想输出:
id point zone_id
1 POINT(-73.964736938476562, 40.7670783996582) 1
2 POINT(-73.962371826171875, 40.773128509521484) 3
3 POINT(-73.989463806152344, 40.767578125) 24
4 POINT(-73.978683471679688, 40.765167236328125) 77
(那里的
区域id
值已组成)您可以尝试以下方法-
SELECT id, point, zone_id
FROM T_points
JOIN T_zones ON ST_WITHIN(point, zone)