0

Poly1 は、境界の内側にある f1 と f2 の面積を計算するバウンディング ボックスです。f1 が存在するが f2 が存在しない場合、このクエリが結果を返すようにするにはどうすればよいですか? 現在、バウンディング ボックスの内部に f1 しかない場合、クエリは結果を返しません。

SELECT ST_Transform(poly1.the_geom,3857) AS the_geom_webmercator, 
       ST_AREA(ST_Union(ST_Transform(ST_Intersection(f1.the_geom,poly1.the_geom),3857)))*.000247105381 AS acreage_of_1,
       ST_AREA(ST_Union(ST_Transform(ST_Intersection(f2.the_geom,poly1.the_geom),3857)))*.000247105381 AS acreage_of_2
            FROM poly1 JOIN farmland f1 ON f1.polygon_type = 'A' AND
                                           st_intersects(f1.the_geom,poly1.the_geom)
                       JOIN farmland f2 ON f2.polygon_type = 'B'
            GROUP BY poly1.the_geom
4

1 に答える 1

1

「farmland f2」ステートメントの前に左外部結合が必要です。f2 に一致するものがない場合でも、左外部結合はすべての行を保持します。

Select ST_Transform(poly1.the_geom,3857) as the_geom_webmercator, 
       ST_AREA(ST_Union(ST_Transform(ST_Intersection(f1.the_geom,poly1.the_geom),3857)))*.000247105381 AS acreage_of_1,
       ST_AREA(ST_Union(ST_Transform(ST_Intersection(f2.the_geom,poly1.the_geom),3857)))*.000247105381 AS acreage_of_2
FROM poly1 JOIN
     farmland f1
     ON f1.polygon_type = 'A' AND st_intersects(fp.the_geom,poly1.the_geom) **LEFT OUTER** JOIN
     farmland f2
     ON f2.polygon_type = 'B'
 group by poly1.the_geom
于 2012-07-16T19:40:52.973 に答える