如何查询一个Postgres`RECORD`数据类型
问题描述:
我有一个查询将返回一行从一个子查询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
有谁知道实现这个的一种方式?
答
使用(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。相应更新。 –
答
或者你可以试试这个
select *
from (
select *
from tbl
) x
where x.col_name = 339787
我对'postgres'中的'row'不熟悉,但是你可以直接将where标准移动到子查询中并过滤所需的字段吗? – sgeddes
是的,我可以但这不适合我正在尝试使用的查询。以上是对它的简化,它很简单,那么当然我可以简单地做到这一点。 –