| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > выбор по древовидной структуре |
| Автор: 17dufa 16.2.2010, 17:08 |
| Есть таблица 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 16.2.2010, 23:32 |
| В MS SQL Server и Firebird (с другими СУБД просто не сталкивался) для перебора древовидных структур можно использовать рекурсивные запросы. Для осуществления выбора по маске можно рекурсивный запрос реализовать в виде хранимой процедуры, а сам выбор по маске осуществлять тривиальным select'ом к этой хранимой процедуре. http://forum.vingrad.ru/index.php?showtopic=276790&view=findpost&p=1998789 реализации хранимых процедур для выборки, вставки и удаления при древовидной организации хранения данных. |
| Автор: Zloxa 17.2.2010, 14:55 |
рекусрсивные запросы реализованы так же в db2, postgree, оракле с 11й версии(до 11й в оракле реализованы иерархические запросы) нипонял зачем. Дерево формируешь в кекурсивном with а в селекте - отбор по маске.... |
| Автор: Gluttton 17.2.2010, 15:40 | ||
Ну типа, что бы запрос выглядел ну-у-у о-о-очень просто:
Ну это так |
| Автор: 17dufa 17.2.2010, 17:41 |
| мдась. было у мя подозрение, что это все не просто. |
| Автор: Zloxa 17.2.2010, 17:47 |
| а помому все просто Наверное мы говорим о разных платформах ;) |
| Автор: Gluttton 17.2.2010, 17:56 |
| 17dufa, вот http://forum.vingrad.ru/index.php?showtopic=273104&view=findpost&p=1968873 мы со Zloxa упражнялись в рекурсии... Вы начните, а там, когда вопросы будут по конкретнее думаю поможем |
| Автор: 17dufa 18.2.2010, 11:49 |
| как нить на досуге для общего развития поупражняюсь. наш Oracle RDB к сожалению слова recursive не кушает *тока не надо мне грить, что Oracle RDB - это зло, я это и сам знаю |