2016-12-19 5 views
0

имеет типаМогу ли я подключиться к пользовательскому типу?

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.

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

С

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

ERROR: syntax error at or near "(" SQL state: 42601 Character: 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 

ответ

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 за первый ответ :) –

Смежные вопросы