![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
17dufa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 2.3.2006 Репутация: 1 Всего: 5 |
Есть таблица T1:
T1_ID int - PK T1_Parent int Value char(10) Есть таблица T2: T2_ID int - PK T1_ID int - FK через T1_Parent записи таблицы T1 организованы в дерево. Теперь задача: есть запись в T2 (то есть есть ее T2_ID) и есть некая символьная маска. Задача - как узнать, есть ли среди записей T1 такая, что: 1. Value удовлетворяет маске 2. T1_ID из имеющейся записи в T2 ссылается либо на данную запись T2, либо на одну из дочерних записей (дочерних в смысле того дерева, в которое организована T1) например: Т1: 1 0 "oooo" 2 1 "aaa" T2: 1 2 теперь предположим, что рассматривается запись T2 = {1,2} и задана маска "o%". Тогда запись T1 = {1,0,"oooo"} - искомая. |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
В MS SQL Server и Firebird (с другими СУБД просто не сталкивался) для перебора древовидных структур можно использовать рекурсивные запросы. Для осуществления выбора по маске можно рекурсивный запрос реализовать в виде хранимой процедуры, а сам выбор по маске осуществлять тривиальным select'ом к этой хранимой процедуре.
Пример реализации хранимых процедур для выборки, вставки и удаления при древовидной организации хранения данных. -------------------- Слава Україні! |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
рекусрсивные запросы реализованы так же в db2, postgree, оракле с 11й версии(до 11й в оракле реализованы иерархические запросы) нипонял зачем. Дерево формируешь в кекурсивном with а в селекте - отбор по маске.... -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Ну типа, что бы запрос выглядел ну-у-у о-о-очень просто:
Ну это так ![]() ![]() -------------------- Слава Україні! |
|||
|
||||
17dufa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 2.3.2006 Репутация: 1 Всего: 5 |
мдась. было у мя подозрение, что это все не просто.
|
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
а помому все просто
![]() Наверное мы говорим о разных платформах ;) -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
17dufa, вот тут мы со Zloxa упражнялись в рекурсии...
Вы начните, а там, когда вопросы будут по конкретнее думаю поможем ![]() -------------------- Слава Україні! |
|||
|
||||
17dufa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 2.3.2006 Репутация: 1 Всего: 5 |
как нить на досуге для общего развития поупражняюсь.
наш Oracle RDB к сожалению слова recursive не кушает *тока не надо мне грить, что Oracle RDB - это зло, я это и сам знаю ![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |