2016-08-09 23 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