首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SELECT中unnest()与unnest() in FROM on Postgres中的差异

SELECT中unnest()与unnest() in FROM on Postgres中的差异
EN

Database Administration用户
提问于 2021-09-04 16:02:31
回答 1查看 2.3K关注 0票数 0

我想要将the向量数组的词放在一列中,每一行一个。我可以首先取消数组,然后再用以下方法解锁产生的the向量:

代码语言:javascript
复制
SELECT (unnest(unnest(my_array))).lexeme
FROM my_table
WHERE id = 1;

这意味着:

代码语言:javascript
复制
lexeme  
----------
foo
bar
baz
...

然而,我注意到,如果我试图在FROM子句中这样做:

代码语言:javascript
复制
SELECT lexeme
FROM unnest(
    (SELECT unnest(my_array) FROM my_table WHERE id = 1)
);

我得到:

错误:由用作表达式的子查询返回的多行

所以,我最终会这么做:

代码语言:javascript
复制
SELECT lexeme
FROM (
    SELECT (unnest(col1)).lexeme
    FROM (
        SELECT unnest(my_array) 
        FROM my_table 
        WHERE id = 1 
    ) AS t(col1)
) AS t2;

我得到了最初的结果。但这是冗长的。所以我想知道:

  1. 为什么unnest()在FROM子句中需要一个输入行,而在SELECT子句中却不需要一个输入行?
  2. 是否有一种比我的代码更简洁、更简单的方法来获得FROM子句中的词条列?
  3. 在SELECT子句中取消嵌套与在FROM子句中这样做在性能上有区别吗?
EN

回答 1

Database Administration用户

回答已采纳

发布于 2021-09-05 15:57:51

您不应该在select中使用set返回操作符,即使PostgreSQL允许它。

from中放置它们并使用lateral连接要好得多

代码语言:javascript
复制
SELECT lexeme
FROM my_table t,
  lateral unnest(array_column) AS vector,
  lateral unnest(vector)
WHERE t.product_id = 1;
票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/299062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档