> 1 <

Автор Сообщение
sl8er

[1] Участник

Online status


36 Сообщений

Город: Russia
Род занятий:
Возраст:

©2758   2007-12-11 12:02 GMT      
Есть иерархическая табличка (ID NUMBER, ID_PARENT NUMBER, NAME VARCHAR, TYPE VARCHAR - "COUNTRY", "REGION", "CITY", "STREET") справочника адресов, уровень вложенности максимум 4 (страна, регион, город, улица)

Есть код записи (глубина вложенности неизвестна), необходимо найти все значения, соответствующие этой записи (если искомый пункт - улица, то названия страны, региона, города, улицы; если искомый пункт - регион, то названия страны, региона, а город и улица
- NULL)

и желательно, чтобы это работало побыстрей, т.к. это будет производиться в запросе на большую таблицу.

Спасибо большое заранее.

Delta

[99] ServerOp

Online status


895 Сообщений
http://surgutnet.ru
Город: Russia Surgut
Род занятий: DBA + SysAdm
Возраст: 29

©2759   2007-12-12 11:50 GMT      
типа так...
Код:
select * from (
    select level,
    replace(sys_connect_by_path(decode(level,4,val),'/'), '/')||', '||
    replace(sys_connect_by_path(decode(level,3,val),'/'), '/')||', '||
    replace(sys_connect_by_path(decode(level,2,val),'/'), '/')||', '||
    replace(sys_connect_by_path(decode(level,1,val),'/'), '/')
    from (
            select 0 ID,null PARENT_ID, 'Россия' VAL,'COUNTRY' TYPE_ from dual
            union
            select 1,0, 'Тюменская обл','REGION' from dual
            union
            select 2,1, 'Сургут','CITY' from dual
            union
            select 3,2, 'Ленина','STREET' from dual
            union
            select 4,0, 'Приморский край','REGION' from dual
            union
            select 5,4, 'Владивосток','CITY' from dual
            union
            select 6,5, 'Ленина','STREET' from dual) t     
        connect by prior parent_id = id   
        start with ID = 6
        order by level desc
)
where rownum = 1

Пожалуйста

Если не можешь выиграть, нужно менять правила игры.

sl8er

[1] Участник

Online status


36 Сообщений

Город: Russia
Род занятий:
Возраст:

©2760   2007-12-12 15:54 GMT      
Немного не так. В случае, если искомый ID является не улицей, а, например, областью, то результирующая строчка возвращается в виде
Цитата
, , Россия, Приморский край

а должна в виде
Цитата
Россия, Приморский край, ,

Соответственно, если город, то
Цитата
Россия, Приморский край, Владивосток,

вместо
Цитата
, Россия, Приморский край, Владивосток


Вот (

sl8er

[1] Участник

Online status


36 Сообщений

Город: Russia
Род занятий:
Возраст:

©2762   2007-12-12 16:51 GMT      
Блин, ну переделать в такое я бы и сам смог ) Совсем разленился (
Спасибо большое ))))

> 1 <

© Surgutnet.ru 2005—2010
All rights reserved.
Перепечатка материалов с данного сервера возможна только с ОБЯЗАТЕЛЬНЫМ указанием АКТИВНОЙ ссылки на данный сайт
или с письменного разрешения владельцев материалов.

Расположение посетителей сайта


SQL общее время: 0.026 секунд - SQL запросов: 25 - Среднее время SQL: 0.00105 секунд
Страница создана за 0.086 секунд