我有三個表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