【问题标题】:3-level Hierarchical SQL Query3 级分层 SQL 查询
【发布时间】: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


【解决方案1】:

如果我对您的理解正确,您已经选择了学校、班级和学生。那么这对你有用吗:

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

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

【讨论】:

  • 不幸的是它必须是动态的。学校董事会中有 64 所学校(超过 1000 个班级),根据访问系统的人员,该用户只能看到某些学校、班级和学生。
  • 好的,我明白了,你能用你正在使用的表结构编辑你的问题吗?听起来您将需要 CONNECT BY 子句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多