Suite

Comment puis-je faire une sous-requête dans une sous-requête dans PostGIS ?


J'ai besoin d'ajouter une sous-requête à une fonction de travail. À la place desélectionner * dans le tableau, J'aimeraissélectionnez * à partir de (sélectionnez * à partir de la table où hauteur> 1500) en tant que sous, quelque chose qui fonctionne dans d'autres fonctions que j'ai.

Cependant, cela ne fonctionne pas dans cette fonction. Voir ci-dessous:

Cela fonctionne comme prévu :

select row_to_json(t) from ( select * from table where st_intersects( st_transform( st_setsrid( ST_geomfromgeojson( '{"type":"Polygon","coordinates":[[[[42.56236553192139,37.96026293121387],[42.56256809910864258,37.960]1656565 85332489,37.95957774762163], [42.56308972835541,37.95940856550367], [42.5631058216095,37.95926898996297], [42,56291270256042 5,37.959137873304314], [42.56252110004425,37.9590532817874], [42.561931014060974,37.9590828888294], [42.561678886413574,37.9 59137873304314], [42.56154477596283,37.95921823515514], [ 42.56145358085632,37.959319744735744],[42.561437487602234,37,95942 548373303],[42.56181299686431,37.959861126796085],[42.562150955200195,37.9601318163297],[42.5620275738551,37.960.960.2632]),[42.562150955200195,37.9601318163297],[42.56202757358551,37.960.960. geom)) comme t;

Cela ne fonctionne pas (sous-requête ajoutée), et j'obtiens l'erreurentrée de clause FROM manquante pour la table:

select row_to_json(t) from ( select * from ( select * from table where height>1500 ) sub where st_intersects( st_transform( st_setsrid( ST_geomfromgeojson( '{"type":"Polygon","coordinates":[[[42.56236553192139,37.96026293121387 ], [42.56258010864258,37.960165652451245], [42,56299 85332489,37.95957774762163], [42.56308972835541,37.95940856550367], [42.5631058216095,37.95926898996297], [42,56291270256042 5,37.959137873304314], [42.56252110004425,37.9590532817874], [42.561931014060974,37.9590828888294], [42.561678886413574,37.9 59137873304314], [42.56154477596283,37.95921823515514], [42.56145358085632,37.959319744735744], [42.561437487602234,37.95942 548373303], [42.56181299686431,37.959861126796085], [42.562150955200195,37.9601318163297], [42.56202757358551,37.96030522628 786], [42.56236553192139,37.96026293121387]]]} ), 4326), 3857), table.geom)) // <- error pointe ici comme t;

Comment puis-je faire ceci? Je dois ajouter la chaîne(SELECT * FROM table WHERE hauteur> 1500) AS sousà chaque fois, car cela est défini ailleurs et doit être inclus dans son intégralité.


Grâce à @RhodiumToad sur #postgres, l'astuce est d'utilisersous.geomà la place detableau.

select row_to_json(t) from ( select * from ( select * from table where height>1500 ) as sub where st_intersects( st_transform( st_setsrid( ST_geomfromgeojson( '{"type":"Polygon","coordinates":[[[42.56236553192139, 37,96026293121387], [42.56258010864258,37.960165652451245], [42,56299 85332489,37.95957774762163], [42.56308972835541,37.95940856550367], [42.5631058216095,37.95926898996297], [42,5629127025 6042 5,37.959137873304314], [42.56252110004425,37.9590532817874], [42.561931014060974,37.9590828888294], [42,561678886413 574,37.9 59137873304314], [42.56154477596283,37.95921823515514], [42.56145358085632,37.959319744735744], [42,561437487602 234,37.95942 548373303], [42.56181299686431,37.959861126796085], [42.562150955200195,37.9601318163297], [42,5620275735855 1,37.96030522628 786], [42.56236553192139,37.96026293121387 ]]]}' ), 4326), 3857), sub.geom)) // <-- sub au lieu de table comme t;