У меня есть родительско-дочерняя иерархия, которая изображена, как на картинке. Наверху есть один головной офис, который действует как родительский филиал. Остальные узлы являются дочерними ветвями. Может быть любое количество региональных зон, и к региональной зоне может быть добавлено любое количество дивизионных зон. Точно так же в зону разделения можно добавить любое количество дочерних ветвей. Здесь вход пользователя предоставляется на всех уровнях, и здесь я сталкиваюсь с трудностью отображения только тех ветвей, которые являются дочерними для текущей ветки пользователей, вошедших в систему. Я использую базу данных «Postgresql8.4». Погуглив я обнаружил, что recursion
можно сделать. Но, откровенно говоря, я не понимал шагов, предпринятых в большинстве из них. Так может ли кто-нибудь помочь мне в решении этой головоломки с объяснением последующих шагов?
User Table
============
usr_id; //Unique id of user
usr_branch_id; //Id from the branch table
Branch Table
============
branch_id; //Unique id of branch
branch_text_id;
branch_name;
branch_parent;
where id = 4
, а 4 - n-я строка. Здесь я не могу сказать, какой идентификатор будет идентификатором n-й строки. Более того, насколько я понял, это разбор снизу вверх, а не тот сценарий, который я ищу. И еще одна вещь, которую я отметил, это то, что вы только что немного отредактировали этот ответ.UNION
было изменено наUNION ALL
. Почему это было сделано так? - person harry   schedule 04.10.2013recursive
CTE с именемR
, а затем внутриR
вы присоединяете свою таблицу кR
, так что CTE является своего рода самореферентным:with recursive R as (select ... union all select ... from T join R ...)
. - person mu is too short   schedule 06.10.2013