我可以使用自定义类型字段加入吗?

Jua*_*eza 0 sql postgresql join custom-type

有类型

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;
Run Code Online (Sandbox Code Playgroud)

我的表有一个字段near_link和这项工作:

SELECT (near_link).link_id
FROM avl_pool
Run Code Online (Sandbox Code Playgroud)

但是如果我想与我的地图表 JOIN 以获得附加信息,我不能这样做

SELECT (near_link).link_id
FROM avl_pool a
JOIN map m
  ON a.near_link.link_id = m.link_id
Run Code Online (Sandbox Code Playgroud)

我有错误near_link

错误:缺少表“near_link”SQL 状态的 FROM 子句条目:42P01 字符:81

ON a.(near_link).link_id = v.link_id
               ^
Run Code Online (Sandbox Code Playgroud)

错误:“(”处或附近的语法错误 SQL 状态:42601 字符:83

有没有办法进行这个连接,或者我应该得到一个子查询来获得第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
Run Code Online (Sandbox Code Playgroud)

Por*_*mes 5

您需要将表别名放在连接条件的括号内:

SELECT (a.near_link).link_id
FROM avl_pool a
JOIN map m
  ON (a.near_link).link_id = m.link_id;
Run Code Online (Sandbox Code Playgroud)

括号是必要的,以防止解析器将字段名称解释为表名称。

请参阅文档的“8.16.3. 访问复合类型”部分:https ://www.postgresql.org/docs/9.3/static/rowtypes.html