我有一个查询,它将从子查询返回一个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

有人知道如何实现这一点吗?

最佳答案

使用(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

第二种解决方案是使用表的架构限定名:
select my_squema.some_table as r

关于sql - 如何查询Postgres的RECORD数据类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38861616/

10-11 03:22
查看更多