2016-08-09 4 views
1

포스트 그레스`RECORD`의 데이터 유형을 조회하는 방법 - 예를 들어 아래 참조 : 나는 더에 자격을하려고나는 하위 쿼리에서 <code>RECORD</code> 데이터 형식으로 행을 반환하는 쿼리를

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 반환하므로 실패합니다 선택한 별칭과 위의 쿼리와 같은 이름으로 생성되는 작은 기회가있다 : 당신은 기록을 작성하는 테이블 자체를 참조 할 수 있습니다 나중에 생성 된 열은 레코드 대신에 사용됩니다.

select my_squema.some_table as r 
+0

주 : 테이블의 별명과 같은 이름의 테이블에 컬럼이 있으면 출력의 전체 행이 아닌 해당 컬럼을 가져옵니다. –

+0

@KamilG. 그에 따라 업데이트되었습니다. –

0

는 다른 방법으로 당신이

을 시도 할 수 있습니다 :

select row(r.*) as r 

두 번째 솔루션은 테이블의 스키마 규정 이름을 사용하는 것입니다 : 당신이 당신의 질문에 그랬던 것처럼 첫 번째 솔루션은 row 생성자를 사용하는 것입니다

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