首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Update table with query显示以下错误: error:用作表达式的子查询返回多行

Update table with query显示以下错误: error:用作表达式的子查询返回多行
EN

Stack Overflow用户
提问于 2021-09-29 17:01:55
回答 1查看 26关注 0票数 0

我是Postgresql的新手

我有表"admins_polygons“,其中列"_geometry”上有WKT值,我需要将该WKT转换为同一表中其他列上的几何值。

我已经创建了geometry列,但是当我尝试使用UPDATE来填充具有强制转换的行时,它给出了这个错误:

代码语言:javascript
复制
ERROR:  more than one row returned by a subquery used as an expression
SQL state: 21000

到目前为止,这是我的代码

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2021-09-29 17:59:18

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

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

代码语言:javascript
复制
UPDATE admins_polygons SET 
    polygons = 
        (SELECT CAST(admins_polygons._geometry AS GEOMETRY) 
            FROM admins_polygons WHERE srid = 4326) WHERE srid = 4326 ;

或者,等同地

代码语言:javascript
复制
UPDATE admins_polygons SET 
    polygons = CAST(admins_polygons._geometry AS GEOMETRY)
WHERE srid = 4326 ;

这应该会产生您希望在SET赋值中使用的单行结果。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69380661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档