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)