如果我有这样的表:
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如果重要的话。
更新:子查询是必要的,因为它是一个更复杂的简化案例。
答案 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;