Вы организуете свои иерархические данные, используя модель списка смежностей .Тот факт, что такие рекурсивные операции являются сложными, фактически является одним из основных недостатков этой модели.
Некоторые СУБД, такие как SQL Server 2005, Postgres 8.4 и Oracle 11g, поддерживают рекурсивные запросы с использованием общих табличных выражений с ключевым словом WITH
(см. Также комментарий @ Quassnoi ниже).Эта функция позволяет легко писать такие запросы, но, как упоминалось в комментарии выше, @ OMG Ponies , MySQL пока не поддерживает рекурсивные запросы.
Вы упомянули, что не можете сделатькакие-либо изменения в вашей таблице, но вы можете добавить дополнительную таблицу?Если да, возможно, вас заинтересует следующая статья, в которой описывается альтернативная модель (модель вложенного набора ), которая упрощает (возможно) рекурсивные операции:
Кроме того, я также предлагаю проверить следующую презентацию @ Билла Карвина , постоянного участника StackПереполнение:
Модель таблицы замыкания, описанная в презентации, является очень допустимой альтернативойна вложенный набор.Далее он описывает эту модель в своей книге SQL Antipatterns ( отрывок из главы по этой теме [PDF]).
В противном случае вы можете захотеть сделать рекурсивныйучастие в вашем приложении, загрузка всех данных, построение дерева и прохождение по нему.