2015-08-04 2 views
1

Мне очень хорошо знакомы с базовыми SQL-запросами, однако я никогда не работал с запросом, который имеет дело с иерархическими данными.3-уровневый иерархический SQL-запрос

Я использую элемент управления TreeView Telerik, чтобы отобразить данные, относящиеся к школьной доске со следующей структурой:

--School "ABC" 
----Class "Grade 1" 
----Class "Grade 2" 
------Student #1 
------Student #2 
--School "DEF" 
----Class "Grade 1" 
------Student #3 
----Class "Grade 3" 

TreeView находится в режиме с тремя состояниями флажков, поэтому каждый элемент может быть галочка , Поэтому, если отмечен один дочерний элемент, тогда будет также проверен родительский элемент, и при проверке родительского элемента будут проверены все дочерние элементы.

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

Вот где это сложно. Используя приведенную выше структуру в качестве примера, я выбираю класс «Grade 1» из школы «ABC» и класс «Grade 3» из школы «DEF», который, в свою очередь, выберет студентов № 1 & # 2 И школы " ABC "&" DEF ".

Отдельные школы: ABC, DEF

Выбранные классы: Grade 1, Grade 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 из другого класса титул «Grade 1»

Так что мой вопрос, как я объединить школы ID (ы), имя класса (ов), а также студенческий билет (s) в одно условие, которое решит эту проблему.

Edit:

Вот структура таблиц.

enter image description here

+0

Вы хотите написать SQL-запрос, который будет возвращать все классы на основе списка школ и всех учащихся на основе списка классов? У вас не может быть 'SELECT', который будет возвращать все дети, поскольку классы и ученики имеют разные таблицы. – halfer

ответ

0

Если я вас правильно понял вы имеете выбранную школу, класс и студент. Так будет ли это работать для вас:

where (school = "ABC" and 
     class = "Grade1") 
    OR 
     (school = "DEF" and 
     class = "Grade3") 

Надеюсь, я правильно понял ваши требования.

+0

К сожалению, он должен быть динамичным. В школьном совете имеется 64 школы (более 1000 классов), и в зависимости от того, кто имеет доступ к системе, для этого пользователя будут видны только определенные школы, классы и студенты. – MPaul

+1

Хорошо, я понял, можете ли вы изменить свой вопрос с помощью структуры таблицы, которую вы используете. Похоже, вам понадобится предложение CONNECT BY для этого. – MarioAna

Смежные вопросы