Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Вывод дерева, у которого одинаковые элементы имеют разные parent_id и разных потомков  [new]
MikeSam
Member

Откуда:
Сообщений: 31
Добрый день!
Есть такая таблица и стандартный иерархический запрос к ней
with tree as (
select 2 child_id,  1 parent_id from dual
union all
select 3,  1 from dual
union all
select 4,  2 from dual
union all
select 4,  3 from dual
union all
select 5,  4 from dual
union all
select 6,  4 from dual
)
select level,  lpad (child_id, (level), ' ') child_id,  parent_id
      from tree
start with parent_id = 1
connect by parent_id =  prior child_id
В таблице есть 2 одинаковых элемента (child_id=4) с разными parent_id. У первого есть свой дочерний элемент (child_id=5), у второго свой (child_id=6).
В результате запроса справедливо получаю
 
   LEVEL CHILD_ID	PARENT_ID
	1	2	1
	2	 4	2
	3	  5	4
	3	  6	4
	1	3	1
	2	 4	3
	3	  5	4
	3	  6	4  
Т.е. для каждого child_id=4 вывелось по 2 дочерних элемента. Вопрос: можно ли как-то написать запрос, чтобы у элементов с одинаковых child_id выводились только свои потомки. Причем необходимо именно одинаковые элементы хранить на разных уровнях иерархии.
5 фев 07, 15:26    [3740051]     Ответить | Цитировать Сообщить модератору
 Re: Вывод дерева, у которого одинаковые элементы имеют разные parent_id и разных потомков  [new]
Elic
Member

Откуда:
Сообщений: 29988
MikeSam
можно ли как-то написать запрос, чтобы у элементов с одинаковых child_id выводились только свои потомки.
Можно. Но только после того, как признак "свои потомки" появится в данных.
5 фев 07, 15:33    [3740103]     Ответить | Цитировать Сообщить модератору
 Re: Вывод дерева, у которого одинаковые элементы имеют разные parent_id и разных потомков  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116226
А как же ему узнать, что 5->4 относится к 4->2, а не к 4->3 ?
5 фев 07, 15:34    [3740115]     Ответить | Цитировать Сообщить модератору
 Re: Вывод дерева, у которого одинаковые элементы имеют разные parent_id и разных потомков  [new]
arhey
Member

Откуда: Санкт-Петербург. Россия... :)
Сообщений: 221
постановка неправильная имхо.
это должны быть разные child_id
5 фев 07, 15:55    [3740296]     Ответить | Цитировать Сообщить модератору
 Re: Вывод дерева, у которого одинаковые элементы имеют разные parent_id и разных потомков  [new]
мод
Guest
arhey
постановка неправильная имхо.
это должны быть разные child_id

да. только это должны быть 2 таблицы
5 фев 07, 16:10    [3740403]     Ответить | Цитировать Сообщить модератору
 Re: Вывод дерева, у которого одинаковые элементы имеют разные parent_id и разных потомков  [new]
Exotic
Member

Откуда: Новороссийск
Сообщений: 322
Как правило дерево строится по первичному ключу и внешнему ключу, завязанному на первичный ключ той же таблицы. В данном случае это значит, что не должно быть двух записей с одним child_id. В противном случае дочерние элементы не будут знать, кто их родитель. parend_id должен ссылаться на уникальное поле!

---------------------------------------------
OracleManiacs
5 фев 07, 16:16    [3740456]     Ответить | Цитировать Сообщить модератору
 Re: Вывод дерева, у которого одинаковые элементы имеют разные parent_id и разных потомков  [new]
мод
Guest
Exotic
Как правило дерево строится

У автора не дерево, а направленный граф.
5 фев 07, 17:38    [3741088]     Ответить | Цитировать Сообщить модератору
 Re: Вывод дерева, у которого одинаковые элементы имеют разные parent_id и разных потомков  [new]
MikeSam
Member

Откуда:
Сообщений: 31
мод
У автора не дерево, а направленный граф

Так и есть. Таблица child, parent выведена отдельно для организации иерархии и связывается с таблицей данных по её id.
Elic
Можно. Но только после того, как признак "свои потомки" появится в данных.

Немного не понял. Можешь пояснить чуть подробнее.
5 фев 07, 20:34    [3741933]     Ответить | Цитировать Сообщить модератору
 Re: Вывод дерева, у которого одинаковые элементы имеют разные parent_id и разных потомков  [new]
Elic
Member

Откуда:
Сообщений: 29988
MikeSam
Elic
Можно. Но только после того, как признак "свои потомки" появится в данных.
Немного не понял. Можешь пояснить чуть подробнее.
Для танкистов: на твоих данных твои требования невыполнимы.
5 фев 07, 20:49    [3741987]     Ответить | Цитировать Сообщить модератору
 Re: Вывод дерева, у которого одинаковые элементы имеют разные parent_id и разных потомков  [new]
Elic
Member

Откуда:
Сообщений: 29988
MikeSam
Таблица child, parent выведена отдельно для организации иерархии и связывается с таблицей данных по её id.
У тебя странная модель данных. Тебе надо:
create table t_data(id int primary key, ...);
create table t_tree(id int primary key, parent_id int references t_tree, data_id int /*not null*/ references t_data);
5 фев 07, 20:57    [3742009]     Ответить | Цитировать Сообщить модератору
 Re: Вывод дерева, у которого одинаковые элементы имеют разные parent_id и разных потомков  [new]
MikeSam
Member

Откуда:
Сообщений: 31
Elic
Тебе надо:
create table t_data(id int primary key, ...);
create table t_tree(id int primary key, parent_id int references t_tree, data_id int /*not null*/ references t_data);

Спасибо! Действительно, то что надо.
6 фев 07, 06:57    [3742504]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить