首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Postgres错误:由用作表达式的子查询返回的多行

Postgres错误:由用作表达式的子查询返回的多行
EN

Stack Overflow用户
提问于 2014-01-10 16:07:07
回答 5查看 217.7K关注 0票数 58

我有两个独立的数据库。我试图将一个数据库中的一个列从另一个数据库更新为一个列的值:

代码语言:javascript
运行
复制
UPDATE customer
SET customer_id=
   (SELECT t1 FROM dblink('port=5432, dbname=SERVER1 user=postgres password=309245',
   'SELECT store_key FROM store') AS (t1 integer));

这是我收到的错误:

错误:由用作表达式的子查询返回的多行

有什么想法吗?

EN

回答 5

Stack Overflow用户

发布于 2018-03-14 17:12:17

在有一对多关系的情况下,通过将IN,改为=,通常可以简单地解决根本问题。例如,如果您想更新或删除给定客户的一组帐户:

代码语言:javascript
运行
复制
WITH accounts_to_delete AS 
    ( 
        SELECT     account_id
        FROM       accounts a
        INNER JOIN customers c
                ON a.customer_id = c.id
        WHERE      c.customer_name='Some Customer'
    )

-- this fails if "Some Customer" has multiple accounts, but works if there's 1:
DELETE FROM accounts
 WHERE accounts.guid = 
( 
    SELECT account_id 
    FROM   accounts_to_delete 
);

-- this succeeds with any number of accounts:
DELETE FROM accounts
 WHERE accounts.guid IN   
( 
    SELECT account_id 
    FROM   accounts_to_delete 
);
票数 16
EN

Stack Overflow用户

发布于 2014-01-10 16:11:04

这意味着嵌套的SELECT返回多个行。

您需要在其中添加一个适当的WHERE子句。

票数 5
EN

Stack Overflow用户

发布于 2014-01-10 16:11:25

此错误意味着SELECT store_key FROM store查询在SERVER1数据库中返回了两行或多行。如果要更新所有客户,请使用联接而不是标量=运算符。为了做到这一点,您需要一个条件来“连接”客户来存储项目。

如果希望将所有customer_id更新为同一个store_key,则需要向远程执行的SELECT提供一个WHERE子句,以便查询返回单个行。

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

https://stackoverflow.com/questions/21048955

复制
相关文章

相似问题

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