[sql]вывести парента опредленого уровня.

Usmanova72

Дана табличка ID, Parent_ID, Level, data.
нужно для каждого ID вывести рядом ID родителя поределнного уровня.
ну потом на основе этого сформировать табличку.
ЗЫ, Все это надо сделать в ассess

Ivan826

SELECT id,parent_id FROM table WHERE parent_id=id
или я неправильно понял твой вопрос?

Usmanova72

не правильно.

Ivan826

поподробнее объясни что ты хочешь

oleg701

Я так понимаю "определенного уровня" можно задать условием Level = что-то?
Или под родителем определенного уровня что-то другое подразумевается?

oleg701

Что бы он ни хотел, у тебя идет запрос по одной таблице, а не по объединению.
Так как записей с id=parent_id (то есть я сам себе родитель) в таблице скорее всего нет, твой запрос вернет пустой результат.

Usmanova72

ну допустим все 4 левела для каждого ID(левел которого <=2) рядом выводится id его родителя 2-го уровня во всем дереве.

oleg701

Лучше еще раз по порядку.
У меня есть запись с ID=15, Parent_ID=10, Level=4.
Плюс родители:
ID=10, ParentID=5, Level=3.
ID=5, ParentID=2, Level=2.
ID=2, ParentID=NULL, Level=1.
Родитель 1-го уровня от первой записи - это ID=10 (Level 3) или ID=2(Level 1)?
И вообще, для каких записей и что нужно выбрать в этом примере?

Usmanova72

level родителя считается от смого корня, т.е. для ID=15 родитель второго уровня ID=5(для ID=10, тоже родитель второго уровня ID=5)
результат запросал дожен быть
15 5
10 5
5 5
2 NULL

qsk78

На чистом SQL такое вряд ли напишешь для произвольной глубины.
Придется VBA юзать.

Usmanova72

глубина 4

oleg701

Недавно пробегала ссылка - http://rsdn.ru/article/db/Hierarchy.xml
Судя по ней, для получения нормального результата придется писать хранимую процедуру.
З.Ы. И не спрашивайте меня, поддерживает ли их MySQL.

durka82

З.Ы. И не спрашивайте меня, поддерживает ли их MySQL.

А при чем тут MySQL?
Речь вроде бы шла про ассess, а он их точно не поддерживает.

oleg701

Да, это я ошибся.
Access зато поддерживает VBA плюс формочки для вывода, что вполне заменит хранимую процедуру.
На самом деле если число уровней ровно 4, то проблема наверняка решается.
Просто сейчас нет времени извращаться.

qsk78

По порядку глубины

SELECT id, id FROM table1;

SELECT id, parent_id FROM table1;

SELECT id, (SELECT t1.parent_id FROM table1 AS t1 WHERE t1.id = t.parent_id) FROM table1 AS t;

SELECT id, (SELECT t1.parent_id FROM table1 AS t1 WHERE id =
(SELECT t2.parent_id FROM table1 AS t2 WHERE t2.id = t.parent_id
FROM table1 AS t;

Работает ли это в Access (помню там куча всяких ограничений в ихнем Jet-SQL'е не знаю.

durka82

Как вариант, можно генерить запрос в зависимости от номера уровня, а потом исполнять.
Ну или использовать готовые от .

Usmanova72

зделал так
(SELECT level2.name, Level2.ID, LevelN.ID from DBO_v_dic_dep level2, DBO_v_dic_dep level3, DBO_v_dic_dep levelN where levelN.parent_id=level3.id and levelN.level=4 and level3.parent_ID=level2.id)
union all
(SELECT level2.name, Level2.ID, LevelN.ID from DBO_v_dic_dep level2, DBO_v_dic_dep levelN where levelN.parent_id=level2.id and levelN.level=3)
Оставить комментарий
Имя или ник:
Комментарий: