在 Postgresql 中用查询结果填充列

Populate column with query results in Postgresql

Table 列的结构如下:

经度、纬度、gid、哈希

-78.885636, 36.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。

要使用计算值更新 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

这对我有用:

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
);