加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL:如何访问匿名记录上的列

发布时间:2020-12-13 16:07:58 所属栏目:百科 来源:网络整理
导读:我有一个问题,我正在努力.以下是显示问题的简化查询: WITH the_table AS ( SELECT a,b FROM (VALUES('data1',2),('data3',4),('data5',6)) x (a,b)),my_data AS ( SELECT 'data7' AS c,array_agg(ROW(a,b)) AS d FROM the_table)SELECT c,d[array_upper(d,1
我有一个问题,我正在努力.以下是显示问题的简化查询:

WITH the_table AS (
    SELECT a,b 
    FROM (VALUES('data1',2),('data3',4),('data5',6)) x (a,b)
),my_data AS (
    SELECT 'data7' AS c,array_agg(ROW(a,b)) AS d
    FROM the_table
)
SELECT c,d[array_upper(d,1)]
FROM my_data

在我的数据部分中,您会注意到我正在从多行创建一个数组,并且该数组与其他数据一起返回.此数组需要包含a和b的信息,并保持两个值链接在一起.看起来有意义的是使用匿名行或记录(我想避免实际创建复合类型).

这一切都很好,直到我需要开始拉回数据.在上面的例子中,我需要访问数组中的最后一个条目,这可以通过使用array_upper轻松完成,但是我需要访问以前是b列的值,我无法弄清楚该怎么做.

基本上,现在上面的查询返回:

"data7";"(data5,6)"

我需要回来

"data7";6

我怎样才能做到这一点?

注意:虽然在上面的例子中我使用文本和整数作为我的数据的类型,但它们不是实际的最终类型,而是用于简化示例.

注意:这是使用PostgreSQL 9.2

编辑:为了澄清,SELECT’data7′,6之类的东西不是我追求的.想象一下,为了方便起见,the_table实际上是从数据库表中提取而不是我输入的WITH语句,我不知道表中有哪些数据.

换句话说,我希望能够做到这样的事情:

SELECT c,(d[array_upper(d,1)]).b
FROM my_data

得到这个:

"data7";6

基本上,一旦我通过使用row()函数将某些内容放入匿名记录中,我该如何将其取回?如何拆分’data5’部分和6部分,以便它们不会同时返回一列?

再举一个例子:

SELECT ROW('data5',6)

使’data5’和6在一列中返回.如何将这一列拆分为原来的两列?

我希望澄清一下

解决方法

如果您可以安装 hstore扩展:

with the_table as (
    select a,b
    from (values('data1',my_data as (
    select 'data7' as c,array_agg(row(a,b)) as d
    from the_table
)
select c,(avals(hstore(d[array_upper(d,1)])))[2]
from my_data
;
   c   | avals 
-------+-------
 data7 | 6

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读