【问题标题】:How to query a Postgres `RECORD` datatype如何查询 Postgres `RECORD` 数据类型
【发布时间】:2016-12-16 03:24:09
【问题描述】:

我有一个查询,它将从子查询返回一行作为 RECORD 数据类型 - 参见下面的示例:

select *
from (
    select row(st.*) table_rows
    from some_table st
) x
where table_rows[0] = 339787

我试图在WHERE 子句中进一步限定它,我需要通过提取返回的RECORD 数据类型中的一个节点来做到这一点。

当我执行上述操作时,我收到一条错误消息:

ERROR:  cannot subscript type record because it is not an array

有人知道实现这个的方法吗?

【问题讨论】:

  • 我不熟悉postgres 中的row,但您可以将where 条件移到子查询中并过滤所需的字段吗?
  • 是的,我可以,但这不适合我正在尝试使用的查询。以上是对它的简化,就这么简单,当然,我可以简单地做到这一点。

标签: sql postgresql postgresql-9.1 sqldatatypes


【解决方案1】:

使用(row).column_name。您可以只参考表本身来创建记录:

select *
from (
    select r
    from some_table r
) x
where (r).column_name = 339787

稍后创建与您选择的别名同名的列的可能性很小,并且上述查询将失败,因为select r 将返回后来创建的列而不是记录。第一个解决方案是使用 row 构造函数,就像您在问题中所做的那样:

select row(r.*) as r

第二种方案是使用表的schema限定名:

select my_squema.some_table as r

【讨论】:

  • 注意:如果表中有一列的名称等于表中的别名,您将获得该列,而不是输出中的整行。
  • @KamilG。相应更新。
【解决方案2】:

或者你可以试试这个

select *
from (
    select *
    from tbl
) x
where x.col_name = 339787

【讨论】:

    猜你喜欢
    • 2014-05-05
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2014-04-10
    • 2018-05-31
    • 2019-03-20
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多