【问题标题】:Can I JOIN using a custom type field?我可以使用自定义类型字段加入吗?
【发布时间】:2016-12-19 19:45:28
【问题描述】:

有一个类型

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”SQL 状态的 FROM 子句条目: 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

【问题讨论】:

    标签: sql postgresql join custom-type


    【解决方案1】:

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

    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

    【讨论】:

    • 谢谢,恭喜您的第一个回答 :)
    猜你喜欢
    • 1970-01-01
    • 2022-10-08
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多