PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment utiliser ST_Intersects dans la clause WHERE

Vous essayez probablement d'utiliser ST_Intersects avec un alias d'une expression, pas une colonne ou une géométrie. Et votre logique est inversée :vous devez d'abord analyser et vider les géométries de votre collection d'entités, puis appliquer le filtre, et non l'inverse :

WITH datasource (feature) AS (
 SELECT json_array_elements('{json_string}'::json->'features')  
)
SELECT 
  ST_AsGeoJSON(ST_Union(ST_GeomFromGeoJSON(feature->>'geometry'))),
  ST_AsText(ST_Union(ST_GeomFromGeoJSON(feature->>'geometry')))
FROM datasource
WHERE NOT ST_Intersects(ST_GeomFromGeoJSON(feature->>'geometry'),'{a geometry}');