Jos*_*rns 2 postgresql postgresql-9.2
我正在尝试编写一个SELECT查询,该查询返回RECORD的ROWS。
我已经解决了一半的问题,因为我可以获得一个RECORD返回单个ROW。但是,如何返回一组ROWS呢?
以以下查询为例:
SELECT * FROM
RECORD(
(
ROW(1::integer, 'Florida'::character varying)
)
) AS tbl (id integer, state character varying)
Run Code Online (Sandbox Code Playgroud)
我得到了我的期望:
+==============+
| id | state |
+====+=========+
| 1 | Florida |
+----+---------+
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试向记录中添加一个额外的ROW时,这是我遇到的问题:
SELECT * FROM
RECORD(
(
ROW(1::integer, 'Florida'::character varying),
ROW(2::integer, 'Georgia'::character varying)
)
) AS tbl (id integer, state character varying)
Run Code Online (Sandbox Code Playgroud)
我预期结果类似于:
+==============+
| id | state |
+====+=========+
| 1 | Florida |
+----+---------+
| 2 | Georgia |
+----+---------+
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下PostgreSQL错误:
********** Error **********
ERROR: function return row and query-specified return row do not match
SQL state: 42804
Detail: Returned type record at ordinal position 1, but query expects integer.
Run Code Online (Sandbox Code Playgroud)
我在这里想念什么?琐碎的事,还是我把这一切都弄错了?任何指示或建议,我们将不胜感激,谢谢!
相关说明:我知道如果这要在存储过程中进行SETOF,则可以返回,但是对于此用例,我有兴趣直接通过查询返回ROWS的RECORD,而无需使用存储过程。
我不确定如何使用row构造函数执行此操作,但是使用values子句对我来说似乎更容易(也更干净):
select *
from (
values
(1, 'Florida'),
(2, 'Georgia')
) AS tbl (id, state);
Run Code Online (Sandbox Code Playgroud)
或使用CTE
with tbl (id, state) as (
values
(1, 'Florida'),
(2, 'Georgia')
)
select *
from tbl;
Run Code Online (Sandbox Code Playgroud)
使用的RECORD关键词变成两行成一个单一的记录,如果我没有记错。一条记录最多只能容纳一行。
编辑(在克雷格评论后):
为了完成图片,以下内容将返回完全相同的结果,尽管无法指定列名:
values
(1, 'Florida'),
(2, 'Georgia');
Run Code Online (Sandbox Code Playgroud)
可以在任何可以使用的地方SELECT使用。
| 归档时间: |
|
| 查看次数: |
791 次 |
| 最近记录: |