如何选择一个常量值与子查询结合返回多个值?

时间:2018-01-25 12:42:43

标签: sql postgresql

如果我有这样的表:

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如果重要的话。

更新:子查询是必要的,因为它是一个更复杂的简化案例。

4 个答案:

答案 0 :(得分:0)

错误:您的子查询中有多个结果。你可以试试这个

 SELECT 1, Name FROM foo;

答案 1 :(得分:0)

您想要的查询更简单:

SELECT 1, name
FROM foo;

SELECT子句中有子查询。这是一个标量"子查询,返回零行或一行。它可以返回多个列(在Postgres中)。在这种情况下,返回的值被视为元组。

无论如何,你不想要任何这些。如果您只想要一个名称,则可以向查询添加fetch first 1 row only

答案 2 :(得分:0)

出现此错误的原因是您使用的是子选择,只能返回一行。

SELECT 1

会给你结果

  

1

只有一行。现在您尝试使用子选择

SELECT 1, (SELECT Name FROM foo)

如果foo只包含一行,它将起作用,如果它返回多行,它将不知道该怎么做(如从子查询中放置结果的位置)并且它会抛出错误代替。

你可以尝试

SELECT 1, (SELECT string_agg(Name, ',') FROM foo)

如果您只想收到一行,或

SELECT 1, Name FROM foo

如果你想在一个单独的行上收到所有结果。

答案 3 :(得分:0)

使用from子句中的子查询:

select 1, name
from (select name from foo) subquery;