为什么我们使用`as foo(geom)`而不是`as geom`

时间:2013-03-30 20:39:03

标签: sql postgresql postgis postgresql-9.1

在下面的查询中,为什么我们使用As foo (geom)而不是As geomfoo()做了什么?

SQL查询

SELECT ST_SRID(geom) AS srid, ST_SRID(ST_SetSRID(geom, 4326)) as srid_new
FROM (
    VALUES (
        ST_GeomFromText('POLYGON((70 20, 71 21, 71 19, 70 20))', 4269)), 
        (ST_Point(1,2)
    )
) As foo (geom);

使用As geom会出错:

ERROR:  function st_srid(record) does not exist
LINE 1: SELECT ST_SRID(geom) AS srid, ST_SRID(ST_SetSRID(geom, 4326)...

1 个答案:

答案 0 :(得分:3)

As foo是子查询的别名,附加到它的(geom)是其中的列名。 SQL需要每个子查询的别名。在manual in the chapter Subqueries

中查找示例

这个地方使用的VALUES表达式也是如此。我引用the manual here

  

从语法上讲,VALUES后跟表达式列表被视为等效于:

 SELECT select_list FROM table_expression