使用Postgresql中的查询结果填充列

时间:2017-01-20 21:52:44

标签: postgresql postgis

表格列结构如下:

经度,纬度,gid,哈希

-78.885636,66.854,1,空

使用PostgreSQL 9.4并尝试使用geohash函数的结果更新列 Hash

SELECT ST_GeoHash(ST_SetSRID(ST_MakePoint(longitude::float, latitude::float), 4326))
FROM my_table;

要更新列,我正在使用:

UPDATE my_table SET Hash = (SELECT ST_GeoHash(ST_SetSRID(ST_MakePoint(longitude::float, latitude::float), 4326))
FROM my_table);

但是我收到了一个错误:

ERROR: more than one row returned by a subquery used as an expression. 

我是新手,所以我可能会问一个乏味的问题。任何帮助,将不胜感激。现在我将成为RTFM-ing。

2 个答案:

答案 0 :(得分:0)

要使用计算值更新Hash列,您需要使用此查询,其中gid是主键(可能需要更改它)。

UPDATE my_table 
  SET Hash = my_table_2.geo_hash
  FROM 
    (SELECT gid, 
            ST_GeoHash(ST_SetSRID(ST_MakePoint(longitude::float, latitude::float), 4326)) as geo_hash
      FROM my_table) as my_table_2
 WHERE my_table.gid = my_table_2.gid

答案 1 :(得分:0)

这对我有用:

UPDATE my_table SET "Hash" = (
SELECT ST_GeoHash(ST_SetSRID(ST_MakePoint(longitude::float, latitude::float), 4326))
 FROM my_table p
 WHERE my_table.gid = p.gid
);