我想使用PostgreSQL找出相同查询中的交集和差异(其他数据库的逻辑应该相同)。
如何在同一查询中组合ST_Intersection和ST_Difference并返回结果。
我试过了:
select 1 as keys,(st_intersection(tale1.the_geom,table2.the_geom)) from table1,table2
UNION select ,st_difference(table1.the_geom,table2.the_geom) from table1,table2;
但它在选择^,st_difference(....
之后返回错误说错误答案 0 :(得分:1)
你有几个问题:你在第一个选择中有2列,在第二个中只有一个,加上你有一个来自ST_Difference的逗号,大概你想放一个2或者某些东西。您可以通过在With查询中选择table1和table2中的geoms,然后将它们合并来简化查询,例如,
with geoms (geom1, geom2) as
(select a.the_geom, b.the_geom from table1 a, table2 b)
select 1, st_intersection(geom1, geom2) from geoms where st_intersects(geom1, geom2)
union
select 2, st_difference(geom1, geom2) from geoms where st_intersects(geom1, geom2);
注意在两个查询中添加ST_Intersects(geom1,geom2)的位置 - 这将限制与至少具有某些交集的多边形的交集和差异,从而避免笛卡尔连接。理想情况下,你也应该在那里a.id!= b.id,以避免自相交/差异,但我希望你明白这一点。