我希望将 tsvector 数组的词位放在一列中,每行一个。我可以首先取消嵌套数组,然后使用以下命令生成 tsvector:
SELECT (unnest(unnest(my_array))).lexeme
FROM my_table
WHERE id = 1;
这使:
lexeme
----------
foo
bar
baz
...
但是,我注意到,如果我尝试在 FROM 子句中做同样的事情:
SELECT lexeme
FROM unnest(
(SELECT unnest(my_array) FROM my_table WHERE id = 1)
);
我得到:
错误:用作表达式的子查询返回多行
所以,我最终这样做:
SELECT lexeme
FROM (
SELECT (unnest(col1)).lexeme
FROM (
SELECT unnest(my_array)
FROM my_table
WHERE id = 1
) AS t(col1)
) AS t2;
我得到了原始结果。但这很冗长。所以,我想知道:
为什么 unnest() 在 FROM 子句中需要单个输入行,但在 SELECT 子句中不需要?
有没有比我的代码更简洁、不那么复杂的方式来获取 FROM 子句中的词位列?
SELECT 子句中的取消嵌套与 FROM 子句中的取消嵌套在性能上是否存在差异?
您实际上不应该在 中使用集合返回运算符
select
,即使 PostgreSQL 允许这样做。最好将它们放在
from
并使用lateral
连接