2016-08-09 21 views
1

我有一个查询将返回一行从一个子查询RECORD数据类型 - 参见下面的例子:如何查询一个Postgres`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 

有谁知道实现这个的一种方式?

+0

我对'postgres'中的'row'不熟悉,但是你可以直接将where标准移动到子查询中并过滤所需的字段吗? – sgeddes

+0

是的,我可以但这不适合我正在尝试使用的查询。以上是对它的简化,它很简单,那么当然我可以简单地做到这一点。 –

回答

2

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

注意:如果表中的列名称与表中的别名相同,则将获得该列,而不是输出中的整个行。 –

+0

@KamilG。相应更新。 –

0

或者你可以试试这个

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