Иерархический запрос

JackVlg
Дата: 24.02.2007 14:32:36
OS: Oracle Enterprise Linux
OracleDB: Oracle Database Server 10gR2

Есть табличка Folders с данными:
ГостЪ
Дата: 24.02.2007 14:37:16
JackVlg
OS: Oracle Enterprise Linux
OracleDB: Oracle Database Server 10gR2

Есть табличка Folders с данными:


информативно:)
JackVlg
Дата: 24.02.2007 14:38:56
ID Name Parent_ID
1 Входящие 0
2 Архив 1
3 Исходящие 0
4 Корзина 0

Делаю такой запрос:

select id, name, level
from folders
connect by prior id = parent_id
order siblings by name

И получаю интересный результат:
1 Входящие 1
2 Архив 2
3 Исходящие 1
4 Корзина 1
2 Архив 1

Вот непонятно, почему папка архив в результате 2 раза с разными уровнями?
JackVlg
Дата: 24.02.2007 14:39:46
Первое сообщение просто случайно нажал CTRL+Enter, по привычке
softwarer
Дата: 24.02.2007 14:42:02
JackVlg
ID Name Parent_ID
1 Входящие 0
2 Архив 1
3 Исходящие 0
4 Корзина 0

Ноль здесь - очень неудачное решение. Убери его и никогда так не делай.

JackVlg
Вот непонятно, почему папка архив в результате 2 раза с разными уровнями?

Первый совет: посмотри внимательно на свои данные и подумай, чем папка "Архив" отличается от всех остальных.

Второй совет: посмотри внимательно на описание синтаксиса иерархических запросов и найди, что ты забыл.

Третий совет: выполни оба совета, а не только второй :)
JackVlg
Дата: 24.02.2007 14:46:44
1. Дело в том, что папка архив, является подпапкой Входящих!
2. Если делаю start with то план выполнения превращается в ужас, сплошные FULL SCAN
softwarer
Дата: 24.02.2007 14:52:27
Если тебя пугает фуллскан на четырех записях, подумай над использованием запроса

select 1 from dual

План у него просто замечательный.
Stax.
Дата: 24.02.2007 15:55:10
JackVlg
1. Дело в том, что папка архив, является подпапкой Входящих!
2. Если делаю start with то план выполнения превращается в ужас, сплошные FULL SCAN

Посмотрите сдесь УЖАСНЫЙ ПЛАН (_old_сonnect_by+enabled)
Мож в 11 улучшат реализацию, не знаю

Старт указывать надо, иначе будет строить дерево для КАЖДОЙ строки
......
stax