用查询更新表给了我这个错误:错误:作为表达式使用的子查询返回的多行

  • 本文关键字:错误 查询 表达式 返回 更新 postgresql
  • 更新时间 :
  • 英文 :


我是Postgresql的新手

我有表" admins_多边形"这里有列"_geometry"它具有WKT值,我需要将该WKT转换为同一表中其他列的几何值。

我已经创建了几何列,但当我尝试使用UPDATE来填充行与CAST它给了我这个错误:

ERROR:  more than one row returned by a subquery used as an expression
SQL state: 21000

这是我到目前为止的代码

SELECT AddGeometryColumn ('admins_polygons', 'polygons', 4326, 'POLYGON', 2)
SELECT admins_polygons._geometry
FROM admins_polygons
SELECT CAST (admins_polygons._geometry AS GEOMETRY)
FROM admins_polygons
UPDATE admins_polygons SET 
polygons = (SELECT CAST (admins_polygons._geometry AS GEOMETRY)
FROM admins_polygons)

您需要进一步限定子查询,最好使用唯一约束的列,这样它只返回一条记录。

值得庆幸的是,您已经用这样一个键创建了它,即几何列的网格:

UPDATE admins_polygons SET 
polygons = 
(SELECT CAST(admins_polygons._geometry AS GEOMETRY) 
FROM admins_polygons WHERE srid = 4326) WHERE srid = 4326 ;

,或者说等价于

UPDATE admins_polygons SET 
polygons = CAST(admins_polygons._geometry AS GEOMETRY)
WHERE srid = 4326 ;

应该产生您正在寻找的用于SET赋值的单行结果。

注意,如果您只希望更新这一条记录,则可能还需要包含最后一个WHERE条件。