Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.5 MB
Время: 0.028 c
14-1097846076
Prohodil Mimo
2004-10-15 17:14
2004.11.07
Куда девается непотраченное электричество, выработанное ЭС ?


14-1098369752
wicked
2004-10-21 18:42
2004.11.07
группирование данных


1-1098742630
saNat
2004-10-26 02:17
2004.11.07
Прокрутка в Мемо


1-1098283190
UVV
2004-10-20 18:39
2004.11.07
for


8-1091552205
Unn
2004-08-03 20:56
2004.11.07
Дисторшн




   Наверх