3级分层SQL查询

时间:2015-08-04 13:41:02

标签: sql vb.net oracle treeview hierarchical

我非常了解基本的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处于三态复选框模式,因此可以检查每个元素。因此,如果检查单个子元素,那么也将检查父元素,并且在检查父元素时,将检查所有子元素。

在检查了一些学校,班级和学生之后,以下屏幕在图表中显示有关学生的信息,该图表当前使用学校ID(如果选中多个)以选择这些学校的所有学生。

这里变得棘手。以上述结构为例,我选择了等级#"等级1"来自学校" ABC"和班级" 3年级和34岁;来自学校" DEF"反过来会选择#1& #2和学校" ABC" &安培; " DEF"

  

选定的学校:ABC,DEF

     

所选课程:1年级,3年级

     

选定的学生:#1,#2

如前所述,我当前的SQL查询仅基于学校ID,我知道我不能在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)

因为这也将选择其他班级标题#34; 1年级和34年级的学生#3;

所以我的问题是,如何将学校ID,班级名称和学生ID组合成一个可以解决这个问题的条件。

修改

这是表格的结构。

enter image description here

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你就有选定的学校,班级和学生。那么这对你有用吗?

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

我希望我能正确理解你的要求。