Форум: "Базы";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
ВнизПомогите написать запрос Найти похожие ветки
← →
Denis © (2004-10-06 15:48) [0]Приветствую!
Схематически таблица
А B
10 15
12 10
21 22
50 12
01 30
02 50
Задача - зная одно значение из столбца В, например 50,
сделать такую выборку:
получаем запись1, где В=50, следующая запись2 - где А = Взаписи1. В записи3 А = Взаписи2. И так далее.
Можно ли сделать это одним запросом?
Вариант ХП или функции, циклически формирующей условие запроса не подойдет, - медленно, т.к. в таблице уже около 70 тыс. записей, и растет она очень быстро.
← →
Silver Alex © (2004-10-06 16:20) [1]одним запросом достать нельзя, это во первых.А во вторых, зачем отбирать на клиента 70 000 записей?
← →
Nikolay M. © (2004-10-06 16:28) [2]Бред какой...
А зачем нужна такая таблица, какие цели преследуются?
← →
Denis © (2004-10-06 16:28) [3]не, на клиента 70000 не надо.
на клиента прийдет НД макимум 20-25 записей.
← →
Silver Alex © (2004-10-06 16:29) [4]а зачем тогда реплика про 70 000 записей?
← →
Denis © (2004-10-06 16:33) [5]Nikolay M. © (06.10.04 16:28) [2]
Аргументируй почему бред? :|
Это цепочка технологической документации. Чертежей в частности.
Silver Alex © (06.10.04 16:29) [4]
Это критично? Реплика была к тому, что ХП будет относительно долго работать на этом количестве данных.
← →
Ольга (2004-10-06 16:39) [6]Мне кажется, вы слишком упростили и абстрагировали таблицу, поэтому толковый запрос не построить. Чем-то нужно усекать кол-во записей, по какому-то условию выбирать 20-25 записей (первые попавшиеся?).
← →
Silver Alex © (2004-10-06 16:39) [7]>>Denis © (06.10.04 16:33) [5]
будет долго работать если много детей(я так понял надо достать всех детей), но другого пути не знаю.Только ХП, если хотя бы знать сколько уровней вложенности, можно написать запрос.А так ..
← →
Sergey13 © (2004-10-06 16:40) [8]2[2] Nikolay M. © (06.10.04 16:28)
>Бред какой...
>А зачем нужна такая таблица, какие цели преследуются?
Обычное дерево. Никакого бреда.
[5] Denis © (06.10.04 16:33)
>Реплика была к тому, что ХП будет относительно долго работать на этом количестве данных.
А что индексов нет и небудет? И "относительно" чего долго? Да и объем то не шибко. Для ускорения подобных запросов (на Оракле) я делал маленькую денормализацию 8-). Добавлял поле со значением "коренного" ИД. И рыскал не по всей таблице, а по отдельной "ветке".
← →
Nikolay M. © (2004-10-06 16:41) [9]
> Denis © (06.10.04 16:33) [5]
> Аргументируй почему бред? :|
Потому что это выглядит как бред. Чем думал проектировщик, когда создавал такую таблицу? Конечно, возможно, что если я узнаю какими аргументами он руководствовался, я изменю свое мнение.
Что есть "цепочка технологической документации"? Вложенность друг в друга? Тогда, например, можно обойтись полем Sequence.
← →
Denis © (2004-10-06 16:44) [10]Sergey13 © (06.10.04 16:40) [8]
Это хорошая идея, насчет дополнительного поля.
А индексы - есть они, куда ж им деться? Тутачки, живы здоровы:)
← →
Denis © (2004-10-06 16:50) [11]Nikolay M. © (06.10.04 16:41) [9]
Чем думал? Головой думал.
Одно поле - уникальный номер, второе - ссылка уникальный номер родителя.
Как иначе можно построить дерево в одной таблице?
← →
Sergey13 © (2004-10-06 16:57) [12]2[11] Denis © (06.10.04 16:50)
Просто ты немного неудачно описал структуру. Обычно поля обзывают Id и Parent_Id. И значения Parent_Id обычно меньше Id. По смыслу так должно получаться. Я тоже не сразу "въехал" в "деревянность". 8-)
← →
Denis © (2004-10-06 17:06) [13]Sergey13 © (06.10.04 16:57) [12]
Вот оно что...
А что есть некие стандарты для обзывания полей? :)
← →
Ega23 © (2004-10-06 17:11) [14]А что есть некие стандарты для обзывания полей? :)
Нет, конечно все поля надо называть col1, col2, ... colN или A, B, C, ... ,Z.
Это, кстати, и к Form1.Panel14.Button25 относится...
← →
Sergey13 © (2004-10-06 17:12) [15]2[13] Denis © (06.10.04 17:06)
>А что есть некие стандарты для обзывания полей? :)
Стандартов нет - есть традиции. Бывает они действеннее стандартов. 8-)
← →
Denis © (2004-10-06 17:18) [16]Ega23 © (06.10.04 17:11) [14]
Приколист. :))
Sergey13 © (06.10.04 17:12) [15]
Ага. Особенно национальные. :))
Все, ветка в оффтоп превратилась... 8-)
← →
Nikolay M. © (2004-10-06 17:19) [17]
> Denis © (06.10.04 17:06) [13]
> А что есть некие стандарты для обзывания полей? :)
ГОСТ, например. Не применительно конкретно к полям, а наименованиям вообще.
> Чем думал? Головой думал.
> Как иначе можно построить дерево в одной таблице?
Теперь пусть ей же думает, как легко вытащить данные. Хотя решать это надо было на этапе проектирования. Без избыточности теперь не обойтись.
Да и вопрос можно было бы задать в виде: как вытащить ветку иерархического дерева, а не как мне почесаться левой ногой...
← →
Sergey13 © (2004-10-06 17:23) [18]2[17] Nikolay M. © (06.10.04 17:19)
>Теперь пусть ей же думает, как легко вытащить данные. Хотя решать это надо было на этапе проектирования. Без избыточности теперь не обойтись.
Интересно, а что бы ты предложил? Я предложил избыточность для ускорения (кстати не факт что она нужна для ХП - я пользовал запрос на Оракле), а не для функциональности.
← →
Nikolay M. © (2004-10-06 17:37) [19]
> Sergey13 © (06.10.04 17:23) [18]
Разные способы есть.
http://sdm.viptop.ru/articles/sqltrees.html
Если делать хранимкой или циклом на клиенте, избыточность, конечно, не обязательна.
← →
Ega23 © (2004-10-06 17:39) [20]"Деревянная" структура зачастую бывает очень удобна. Обход - как обычно, через рекурсивный вызов ХП. С занесением данных, например, во временную таблицу.
← →
msguns © (2004-10-06 17:59) [21]Что-то похожее на разузлование.. Только вот направление движения ? Если сверху вниз, то проблем нет (Nikolay M. © (06.10.04 17:37) [19]). У Вострикова с Ковязиным даже есть классный пример хранимки с подобной алгритмикой. А вот если надо "в оба конца".. Тогда двух индексов (свой и папин) маловато будет";)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.023 c