2016-12-19 3 views
0

는 유형을 가지고사용자 정의 유형 필드를 사용하여 JOIN 할 수 있습니까?

내 테이블 필드 near_link이 작업이
CREATE TYPE map.get_near_link AS 
    (link_id integer, 
    distance integer, 
    sentido integer, 
    geom public.geometry(4)); 
ALTER TYPE map.get_near_link 
    OWNER TO postgres; 

:

SELECT (near_link).link_id 
FROM avl_pool 

하지만이 추가적으로 정보를 얻을 내 맵 테이블에 가입하려면 나는이

SELECT (near_link).link_id 
FROM avl_pool a 
JOIN map m 
    ON a.near_link.link_id = m.link_id 
을 기운을

near_link에 대해 오류가 발생했습니다.

ON a.(near_link).link_id = v.link_id 
      ^

ERROR: syntax error at or near "(" SQL state: 42601 Character: 83

ERROR: missing FROM-clause entry for table "near_link" SQL state: 42P01 Character: 81

이 가입 또는 나는이처럼 link_id 첫째을 얻을 수있는 하위 쿼리를 받아야 할 수있는 방법이 있나요?

WITH getLink as (
    SELECT (near_link).link_id, * 
    from avl_pool a 
) 
SELECT * 
FROM getLink g 
JOIN map m 
    ON g.link_id = m.link_id 

답변

2

당신은 당신의 조인 조건에서 괄호 안에 테이블 별칭을 넣어해야합니다

SELECT (a.near_link).link_id 
FROM avl_pool a 
JOIN map m 
    ON (a.near_link).link_id = m.link_id; 

괄호는 테이블 이름으로 필드 이름을 해석하는 파서를 방지하기 위해 필요하다.

항을 참조 문서의 "8.16.3 복합 형 액세스."첫 번째 답 : 대한 https://www.postgresql.org/docs/9.3/static/rowtypes.html

+0

감사합니다, congratz을 –

관련 문제