рекурсивный собственный запрос - PullRequest
9 голосов
/ 18 июля 2010

У меня есть следующая таблица:

myTable:
+----+----------+
| id | parentID |
+----+----------+
|  1 |     null |
|  2 |        1 |
|  3 |        1 |
|  4 |        2 |
|  5 |        4 |
-----------------

Я хотел бы вернуть трассировку всех строк, пока не будет родительского идентификатора. Так что ".... ГДЕ id = 5" даст мне:

5, 4, 2, 1

1 Ответ

9 голосов
/ 18 июля 2010

Вы организуете свои иерархические данные, используя модель списка смежностей . Тот факт, что такие рекурсивные операции являются сложными, на самом деле является одним из основных недостатков этой модели.

Некоторые СУБД, такие как SQL Server 2005, Postgres 8.4 и Oracle 11g, поддерживают рекурсивные запросы с использованием общих табличных выражений с ключевым словом WITH.

Что касается MySQL, вас может заинтересовать следующая статья, в которой описывается альтернативная модель (модель вложенного набора ), которая делает рекурсивные операции более легкими (возможными):

Кроме того, я также предлагаю проверить презентацию Билла Карвина , указанную в комментариях выше. Описанная модель таблицы замыканий является очень допустимой альтернативой вложенному набору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...