我有三个表CLASSES
,CHILD_CLASSES
和STUDENTS
。MYSQL查询INNER JOIN两个表
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.我试图找到一个查询来计算有权访问的特定类的用户数量。所以如果我查看1的class_id,查询将返回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);
您可以发布您正在使用的查询吗? – EFraim 2010-03-04 18:51:41
所以我的查询将只返回2,因为它只是在CHILD_CLASSES表中找到class_id相同的两个类。我需要以某种方式添加到总计SELECT COUNT(class_id)FROM类的结果,其中class_id = 1; – medium 2010-03-04 18:58:58
如果你使用Pg,你可以做一个递归查询,其中类可以是N级的。它也会更快。 – 2010-03-04 19:07:47