Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

Помогите написать запрос   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.022 c
1-1098345443
SLP
2004-10-21 11:57
2004.11.07
Функция Delphi- попадает ли заданная дата в промежуток дат


14-1096950942
olookin
2004-10-05 08:35
2004.11.07
Прогнозы на 3-й тур Лиги Чемпионов


1-1098164882
denis24
2004-10-19 09:48
2004.11.07
определение свойств


14-1098276320
Nikolay M.
2004-10-20 16:45
2004.11.07
В продолжение темы дипломов, но о диссертациях..


1-1098695174
DelphiLexx
2004-10-25 13:06
2004.11.07
WndProc и ловушки