sql - 用另一个列的总和更新列

标签 sql postgresql sql-update qsqlquery postgresql-11

我使用 PgAdmin4 开发了一个 PostGIS 数据库。 我试图用另一个名为“zones_cultures”的表中另一列(称为“surface_cultures”)的总和更新名为“parcelles”的表中的一列(称为“surface_net”)。表“zones_cultures”有一个带有“parcelles”的外键(“zones_cultures.id_parcelles”=“parcelles.id_egrid”)。

综上所述,列“surface_net”是“zones_cultures”组按“id_egrid”的总和。

所以我做了这个 SQL 查询来更新“surface_net”列:

UPDATE public.parcelles
    SET surface_net=
    (SELECT sum(zones_cultures.surface_cultures)
        FROM parcelles inner join zones_cultures on parcelles.id_egrid = zones_cultures.id_parcelles
        group by parcelles.id_egrid);

但它不起作用。这是结果:

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

有人可以帮助我进行 SQL 查询以更新列“surface_net”吗? 提前致谢

最佳答案

您需要在子查询中使用 WHERE 子句,使其为您正在更新的表的 1 行返回 1 个相关结果。我相信这应该有效:

UPDATE public.parcelles p
    SET surface_net=
    (SELECT sum(zones_cultures.surface_cultures)
        FROM parcelles inner join zones_cultures on parcelles.id_egrid = zones_cultures.id_parcelles
        where parcelles.id_egrid = p.id_egrid
        group by parcelles.id_egrid);

关于sql - 用另一个列的总和更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394141/

相关文章:

PHP SQL 搜索结果作为 POST/GET 链接

mysql - 为什么我求和的结果是错误的?

postgresql - 每次 postgres super 用户登录到 postgres 数据库时,如何生成(电子邮件)警报

python - 使用 HAVING 选择 SQLAlchemy 列的计数和值

php - 如何在 PHP 中获取受 MySQL 查询影响的行?

mysql - SQL SELECT MIN 值与 WHERE 语句

sql - 连接到数据库时 Azure SQL 数据库超时问题

django - Pycharm、Django 和 PostgreSQL

php - 在 wordpress 插件管理中更新表列表

Java如何增加数据库表中 double 的值