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

时间:2016-12-19 19:45:29

标签: 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;

我的表格中有一个字段near_link,这项工作:

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的错误。

  

错误:表格" near_link"缺少FROM子句条目SQL状态:   42P01性格:81

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

错误:语法错误在或附近"(" 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

1 个答案:

答案 0 :(得分: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