У меня есть таблица, содержащая записи, которые связаны следующим образом:
родитель, ребенок, внук.
Я хотел бы иметь возможность запускать запросы, чтобы делать следующее:
- получить все записи, которые произошли от конкретной записи
- получить все записи, которые являются прямыми дочерними элементами конкретной записи (то есть только прямыми дочерними элементами)
- получить все записи, которые являются внуками определенной записи (т. е. только внуками)
- получить дедушку или бабушку записи
- получить родительский элемент записи
- получить все записи (и их детей и внуков)
Я хочу, чтобы этот запрос возвращал данные в отсортированном виде, чтобы я мог создать структурированный документ (например, XML из результата запроса). Под "отсортированным" я подразумеваю, что набор результатов "ГРУППИРУЕТСЯ" по родительскому элементу ТОГДА дочерний элемент, ТОГДА внук.
Я разработал такую простую таблицу (КОД ПСЕВДО):
CREATE TABLE family_tree {id integer
, parent_id integer
, child_id integer
, fname varchar(16)
, lname varchar(32) };
У меня есть ряд вопросов:
(Принимая во внимание запросы, которые я хочу выполнить [(1) - (6) выше]), это лучшая (т.е. самая эффективная структура таблицы, которую я могу использовать? Если нет, то что?
Может ли кто-нибудь помочь мне в написании операторов ANSI SQL для выполнения запросов (1) - (6) выше?