如果我有这样的表:
CREATE TABLE foo (
id INTEGER,
name VARCHAR
);
并运行此查询:
SELECT 1, (SELECT name FROM foo);
我希望结果看起来像这样:
1 John
1 Jack
1 Jane
...
但相反,我收到一个错误
[21000] ERROR: more than one row returned by a subquery used as an expression
我怎样才能做到这一点?PostgreSQL 10,如果这很重要的话。
更新:子查询是必需的,因为它是更复杂的简化情况。
所需的查询更简单:
SELECT 1, name
FROM foo;
SELECT
子句中有一个子查询。 这是一个"标量"子查询,返回零行或一行。 它可以返回多个列(在 Postgres 中(。 在这种情况下,返回的值被视为元组。
无论如何,你都不想要这些。 如果只需要一个名称,则可以向查询添加fetch first 1 row only
。
错误:子查询中有多个结果。你可以试试这个
SELECT 1, Name FROM foo;
此错误的原因是您使用的是子选择,该子选择只能返回一行。
SELECT 1
会给你结果
1
只有一行。现在您正在尝试使用子选择
SELECT 1, (SELECT Name FROM foo)
如果foo
只包含一行,这将起作用,如果它返回多行,它将不知道该做什么(例如将子查询的结果放在哪里(,而是抛出错误。
你可以试试
SELECT 1, (SELECT string_agg(Name, ',') FROM foo)
如果您只想接收一行,或者
SELECT 1, Name FROM foo
如果要在单独的行上接收所有结果。
在 from
子句中使用子查询:
select 1, name
from (select name from foo) subquery;