Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.49 MB
Время: 0.033 c
14-1098124208
Petia
2004-10-18 22:30
2004.11.07
Delete!!!


14-1097828372
stone
2004-10-15 12:19
2004.11.07
Пятница: Альтернативные задачки


3-1097070131
Пуртик
2004-10-06 17:42
2004.11.07
Как ускорить закачку?


6-1093936994
Alexey
2004-08-31 11:23
2004.11.07
FTP


3-1097472932
CrazyBoy
2004-10-11 09:35
2004.11.07
Cache - это быстро ???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский