【发布时间】:2015-10-26 22:56:52
【问题描述】:
我非常了解基本的 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(如果选中多个)来选择这些学校的所有学生。
这就是棘手的地方。以上述结构为例,我从学校“ABC”中选择班级“Grade 1”,从学校“DEF”中选择班级“Grade 3”,然后依次选择学生 #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)
因为这也会从另一个班级名称“1 年级”中选择学生 #3
所以我的问题是,如何将学校 ID、班级名称和学生 ID 组合成一个可以解决此问题的条件。
编辑:
这是表格的结构。
【问题讨论】:
-
您是否要编写一个 SQL 查询,该查询将根据学校列表返回所有课程,并根据课程列表返回所有学生?你不能有一个
SELECT来返回所有的孩子,因为班级和学生是不同的桌子。
标签: sql vb.net oracle treeview hierarchical