Я очень хорошо знаком с базовыми SQL-запросами, однако никогда не работал с запросами, работающими с иерархическими данными.
Я использую элемент управления Telerik TreeView для отображения данных, связанных со школьной доской, со следующей структурой:
--School "ABC"
----Class "Grade 1"
----Class "Grade 2"
------Student #1
------Student #2
--School "DEF"
----Class "Grade 1"
------Student #3
----Class "Grade 3"
TreeView находится в режиме флажка с тремя состояниями, поэтому каждый элемент может быть отмечен. Таким образом, если проверяется один дочерний элемент, родительский элемент также будет проверен, а при проверке родительского элемента будут проверены все дочерние элементы.
После отметки некоторых школ, классов и учеников на следующем экране отображается информация об учениках на графике, который в настоящее время использует идентификаторы школ (если отмечено несколько) для выбора всех учащихся этих школ.
Вот где это становится сложно. Используя вышеприведенную структуру в качестве примера, я выбираю класс 1 из школьного ABC и класс 3 из школьного DEF, который, в свою очередь, выберет учеников №1 и №2 И школы ABC и DEF.
Выбранные школы: ABC, DEF
Выбранные классы: 1 класс, 3 класс
Выбранные студенты: №1, №2
Как упоминалось ранее, мой текущий SQL-запрос основан исключительно на идентификаторе школы, и я знаю, что не могу просто добавить два других условия в предложение where, которые выглядят следующим образом:
AND ClassID IN ('Grade 1', 'Grade 3') --Note there is no primary key for classes, and I can't change that in my position..
AND StudentID IN (1,2)
так как это также выберет учащегося № 3 из другого класса с названием класса 1.
Итак, мой вопрос заключается в том, как объединить идентификаторы школ, имена классов и идентификаторы учащихся в одно условие, которое решит эту проблему.
Изменить:
Вот структура таблиц.
SELECT
, который вернет всех дочерних элементов, поскольку классы и учащиеся относятся к разным таблицам. - person halfer   schedule 13.09.2015