在FROM中使用JOIN语句中的别名

meg*_*ges 9 postgresql postgis

我正在尝试构建一个在FROM语句中使用JOIN语句的别名的PostGIS查询,但这是不可能的.还有另一种方法吗?

SELECT DISTINCT 
ST_Buffer(
    ST_Centroid(geom),
    ST_Area(geom))
FROM building AS b, ST_Transform(sg.geometry, 31467) AS geom 
LEFT JOIN surface_geometry AS sg ON b.id = sg.cityobject_id WHERE ST_Area(geom) < 100
Run Code Online (Sandbox Code Playgroud)

ara*_*nid 10

您可以引入额外级别的子查询.

所以目前你有:

SELECT DISTINCT ST_Buffer( ST_Centroid(geom), ST_Area(geom) )
FROM building AS b,
     ST_Transform(sg.geometry, 31467) AS geom 
     LEFT JOIN surface_geometry AS sg ON b.id = sg.cityobject_id
WHERE ST_Area(geom) < 100
Run Code Online (Sandbox Code Playgroud)

(我改变了缩进以使它更有意义,虽然我仍然不理解它:你似乎没有使用b中任何地方的值).你需要这样的东西:

SELECT DISTINCT ST_Buffer( ST_Centroid(geom), ST_Area(geom) )
FROM (
    SELECT ST_Transform(sg.geometry, 31467) AS geom 
    FROM building AS b
         LEFT JOIN surface_geometry AS sg ON b.id = sg.cityobject_id
) x
WHERE ST_Area(geom) < 100
Run Code Online (Sandbox Code Playgroud)