Postgresql 在from中使用alias from JOIN语句

Postgresql 在from中使用alias from JOIN语句,postgresql,postgis,Postgresql,Postgis,我试图构建一个PostGIS查询,该查询在FROM语句中使用JOIN语句的别名,但这是不可能的。还有别的办法吗 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 WH

我试图构建一个PostGIS查询,该查询在FROM语句中使用JOIN语句的别名,但这是不可能的。还有别的办法吗

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
你为什么不试试:

SELECT DISTINCT 
    ST_Buffer(ST_Centroid(ST_Transform(sg.geometry, 31467),
              ST_Area(ST_Transform(sg.geometry, 31467)))
FROM building b LEFT JOIN surface_geometry sg ON (b.id = sg.cityobject_id)
WHERE ST_Area(ST_Transform(sg.geometry, 31467)) < 100;
这也可能起作用:

SELECT DISTINCT 
    ST_Buffer(ST_Centroid(geom), ST_Area(geom))
FROM building b LEFT JOIN surface_geometry sg ON (b.id = sg.cityobject_id) INNER JOIN
     ST_Transform(surface_geometry.geometry, 31467) geom ON (ST_Area(geom) < 100);

在我没有地方测试as的时候,您可能需要验证它的位置。

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

因此,目前您有:

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
我改变了缩进,使它更有意义,尽管我仍然不理解它:您似乎没有在任何地方使用来自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

谢谢你的回答。第一个可行,但我认为它不是很有效,在每个几何体上进行3次变换,查询包含不必要的重复,因此变得复杂。第二个不起作用,它说:表的FROM子句条目引用无效我刚刚修改了答案,可能使用了完整的表名。谢谢!这很有效。建筑是必需的,因为我只需要与建筑相关的曲面几何图元。有许多与其他类型相关的曲面几何图元。啊,在这种情况下,您可能希望在建筑和曲面几何图元之间建立内部连接,而外部连接在这里并不真正有用。