我有三个表CLASSES
,CHILD_CLASSES
和STUDENTS
。
CLASSES
看起来像这样(它自我引用):
CLASS_ID | CLASS_PARENT |
-------------------------
1 | ---
2 | 1
3 | 2
CHILD_CLASSES
看起来像这样:
CC_ID | PARENT_CLASS_ID | CHILD_CLASS_ID
----------------------------------------
1 | 1 | 2
2 | 1 | 3
3 | 2 | 3
STUDENTS
看起来像这样
STU_ID | CLASS_ID | STU_NAME
----------------------------
1 | 1 | A
2 | 1 | B
3 | 2 | C
基本上CLASSES
表是自引用的,但每个CLASS也可以有子类与该类相关联。所以CLASS 1有2个孩子和3个孩子,2个孩子只有3个孩子。
所以很多学生可以拥有相同的班级ID。学生还可以查看与他们相关的class_id的孩子的所有信息,因此任何班级ID为1的学生都可以看到1级,2级和3级,但班级2级的学生只能看到班级ID为2和3.我试图找到一个查询来计算具有访问权限的特定类的用户数。因此,如果我查看class_id为1,则查询将返回3,因为它在CHILD_CLASSES表中有两个子项,然后它们本身在classes表中。我似乎无法让这个工作,但我总是很短,因为我试图计算CLASSES表中的1个用户。
我目前使用的查询是
SELECT COUNT(class_id) as TOTAL
FROM students
WHERE class_id IN (SELECT class_id
FROM child_classes
WHERE parent_class_id = 1);
答案 0 :(得分:1)
看起来child_classes
包含与classes
相同的数据,因此以下内容应该有效:
SELECT COUNT(*)
FROM students
WHERE class_id = 1
OR class_id IN ( SELECT child_class_id
FROM child_classes
WHERE parent_class_id = 1
)
它会返回students
个class_id = 1
的所有parent_class_id = 1
或属于{{1}}的班级。