如果我尝试创建一个列,其值是返回多行的 select 语句,那么就会出现错误。
=> select (select 1 union select 2);
ERROR: more than one row returned by a subquery used as an expression
但如果我创建一个做同样事情的函数,我就能得到我想要的行为。
=> create or replace function onetwo() returns setof integer as $$
$> select 1 union select 2
$> $$ language 'sql' strict immutable;
CREATE FUNCTION
=> select onetwo();
onetwo
--------
1
2
为什么会有差异?
SELECT f()
(用于返回集合的函数f
)形式描述为SELECT * FROM f()
的语法糖。它只是被实现是因为它是明确的和方便的简写。 - Edmund