Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2017, 11:38   #1
stsg
Новичок
Джуниор
 
Регистрация: 29.05.2017
Сообщений: 3
По умолчанию Цикл в запросе MS SQL

Доброго дня!
Есть одна таблица tblMain с тремя полями:
ID Info MainID
1 первый NULL
2 второй 1
3 третий 2
4 четыре 3
5 пять 4
Поле MainID - это родительский ID предыдущей записи..
При выборе пятой записи мне нужно проследить всю цепочку до места где MainID = NULL
У меня это работает так:
Выбираем пятую строку - SELECT Info FROM tblMain WHERE ID = <MainID> - тут мы видим запись четыре - SELECT Info FROM tblMain WHERE ID = (SELECT Info FROM tblMain WHERE ID = <MainID>) - тут мы видим запись три - SELECT Info FROM tblMain WHERE ID = (SELECT Info FROM tblMain WHERE ID = (SELECT Info FROM tblMain WHERE ID = <MainID>)) - тут мы видим запись два - SELECT Info FROM tblMain WHERE ID = (SELECT Info FROM tblMain WHERE ID = (SELECT Info FROM tblMain WHERE ID = (SELECT Info FROM tblMain WHERE ID = <MainID>))) - тут мы видим запись один...
Нужно преобразовать это все в цикл WHILE - у меня не выходит...
Конец цикла должен быть когда MainID = NULL
В идеале хотел получить все записи в одну строку "пять - четыре - третий - второй - первый"

Последний раз редактировалось stsg; 29.05.2017 в 11:42.
stsg вне форума Ответить с цитированием
Старый 29.05.2017, 11:54   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Иерархические (рекурсивные) запросы

Рекурсивные SQL запросы
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.05.2017, 11:55   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
В идеале хотел получить все записи в одну строку "пять - четыре - третий - второй - первый"
Код:
select t1.info, --запись 4 и другие поля 
       t2.info, - запись 3
       t3.info, - запись 2
       t4.info  - запись 5
       t5.info - 
from tblmain as t1
left join tblmain as t2 on t2.id =t1.info
left join tblmain as t3 on t3.id =t2.info
left join tblmain as t4 on t4.id =t3.info
left join tblmain as t5 on t5.id =t4.info
where t1.id =<mainid>
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 29.05.2017, 12:22   #4
stsg
Новичок
Джуниор
 
Регистрация: 29.05.2017
Сообщений: 3
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
select t1.info, --запись 4 и другие поля 
       t2.info, - запись 3
       t3.info, - запись 2
       t4.info  - запись 5
       t5.info - 
from tblmain as t1
left join tblmain as t2 on t2.id =t1.info
left join tblmain as t3 on t3.id =t2.info
left join tblmain as t4 on t4.id =t3.info
left join tblmain as t5 on t5.id =t4.info
where t1.id =<mainid>
Да, это понятно, только вместо on t2.id =t1.info должно быть on t2.id =t1.MainID
Но это тоже самое, что и у меня - проблема в том, что я не знаю сколько всего будет "t" - сегодня их будет 5 а завтра 25 и мне каждый раз придется дописывать запрос, а хотелось как то автоматизировать..
stsg вне форума Ответить с цитированием
Старый 29.05.2017, 12:34   #5
stsg
Новичок
Джуниор
 
Регистрация: 29.05.2017
Сообщений: 3
По умолчанию

Спасибо, это то, что нужно, попробую применить.
stsg вне форума Ответить с цитированием
Старый 29.05.2017, 13:30   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
не знаю сколько всего будет "t" - сегодня их будет 5 а завтра 25
а послезавтра 125? Имей ввиду - такие запросы весьма прожорливы и медленные
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переменная в sql-запросе Kaela Общие вопросы C/C++ 2 28.03.2013 20:02
if в запросе sql serres PHP 2 28.05.2010 12:32
Группировка в SQL запросе wm_leviathan SQL, базы данных 8 09.03.2010 13:36
Переменные в запросе SQL Talemir БД в Delphi 2 22.08.2009 21:22
Ошибка SQL запросе. EVG44 БД в Delphi 2 21.10.2007 22:42