我有两个独立的数据库。我试图将一个数据库中的一个列从另一个数据库更新为一个列的值:
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));这是我收到的错误:
错误:由用作表达式的子查询返回的多行
有什么想法吗?
发布于 2018-03-14 17:12:17
在有一对多关系的情况下,通过将IN,改为=,通常可以简单地解决根本问题。例如,如果您想更新或删除给定客户的一组帐户:
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
);发布于 2014-01-10 16:11:04
这意味着嵌套的SELECT返回多个行。
您需要在其中添加一个适当的WHERE子句。
发布于 2014-01-10 16:11:25
此错误意味着SELECT store_key FROM store查询在SERVER1数据库中返回了两行或多行。如果要更新所有客户,请使用联接而不是标量=运算符。为了做到这一点,您需要一个条件来“连接”客户来存储项目。
如果希望将所有customer_id更新为同一个store_key,则需要向远程执行的SELECT提供一个WHERE子句,以便查询返回单个行。
https://stackoverflow.com/questions/21048955
复制相似问题