如何选择与返回多个值的子查询组合的常量值



如果我有这样的表:

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;

相关内容

  • 没有找到相关文章

最新更新