首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何“执行”返回多行/列的CTE查询?

问如何“执行”返回多行/列的CTE查询?
EN

Stack Overflow用户
提问于 2022-02-08 21:02:40
回答 1查看 688关注 0票数 1

作为这个问题的后续行动:

我试着:

代码语言:javascript
复制
perform (with test_as_cte as(select * from myTable) select * from test_as_cte);

但是,得到以下错误:

SQL 42601: ERROR:子查询必须只返回一个列,其中: PL/pgSQL函数inline_code_block第9行执行

如果我在上面的代码中用*替换myCol,那么没有错误。

但是,我需要对CTE进行真实的性能测试,并返回多个列。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-08 21:43:37

括在括号中的WITH查询被视为子select。只要它返回一个单个值(一行中的一列),它的工作方式就很好。否则,您必须将其视为子查询,并按如下方式调用它(在PL/pgSQL代码块中):

代码语言:javascript
复制
PERFORM * FROM (with test_as_cte as (select * from b2) select * from test_as_cte t) sub;

或者只是:

代码语言:javascript
复制
PERFORM FROM (<any SELECT query>) sub;

手册:

PERFORM query; 这将执行query并丢弃结果。编写查询的方式与编写SQL SELECT命令的方式相同,但将初始关键字SELECT替换为PERFORM。对于WITH查询,请使用PERFORM,然后将查询放在括号中。(在这种情况下,查询只能返回一行。)

我想这会更清楚些。我建议对文件进行修正。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71040855

复制
相关文章

相似问题

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