¿Cuál es la forma correcta de calcular la diferencia entre dos capas? Traté de usar el siguiente enfoque:
SELECT ST_Difference(river.geom, lakes.geom)
FROM river LEFT JOIN lakes ON ST_Intersects(river.geom, lakes.geom)
Pero en la salida, pierdo las geometrías de la rivercapa que no se cruzan con ninguna geometría lakes. Parece que la combinación izquierda no funciona como se esperaba.
Actualmente, estoy usando otro enfoque, pero no estoy seguro de que sea correcto:
SELECT ST_Difference(river.geom, lakes.geom)
FROM river JOIN lakes ON ST_Intersects(river.geom, lakes.geom)
UNION
SELECT river.geom
FROM river JOIN lakes ON NOT ST_Intersects(river.geom, lakes.geom)
postgis
attribute-joins
drnextgis
fuente
fuente

El problema aquí no es la unión izquierda, que funciona como se esperaba. Pero cuando la consulta llega a un río que no se cruza con un lago, alimentará la función ST_Difference con NULL como el segundo argumento que parece devolver nulo.
/ Nicklas
fuente