У меня есть три таблицы CLASSES
, CHILD_CLASSES
и STUDENTS
.MYSQL query INNER JOIN two table
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
таблицы самостоятельноно каждый КЛАСС может также иметь детей, связанных с этим классом. Таким образом, у КЛАССА 1 есть дети 2 и 3, а у Класса 2 - дети всего 3.
Так много учеников могут иметь одинаковый идентификатор класса. Студентам также разрешено видеть всю информацию, которая является дочерним элементом класса_id, связанного с ними, поэтому любой студент с идентификатором класса 1 может видеть классы 1, 2 и 3, но ученик с идеей класса 2 может видеть только классы с ID 2 и 3. Я пытаюсь найти запрос, чтобы подсчитать количество пользователей определенного класса, имеющего доступ. поэтому, если бы я искал class_id из 1, запрос вернул бы 3, потому что он имеет двух детей в таблице CHILD_CLASSES, а затем сам в таблице классов. Кажется, я не могу заставить это работать, но я всегда прихожу, потому что пытаюсь подсчитать 1 пользователя в таблице CLASSES.
запрос я использую до сих пор это
SELECT COUNT(class_id) as TOTAL
FROM students
WHERE class_id IN (SELECT class_id
FROM child_classes
WHERE parent_class_id = 1);
Не могли бы вы разместить запрос, который используете? – EFraim
, поэтому мой запрос вернет только 2, потому что он находит только два класса в таблице CHILD_CLASSES, где class_id одинаково. Мне нужно как-то добавить к итогу результат SELECT COUNT (class_id) FROM классов, где class_id = 1; – medium
ЕСЛИ вы используете Pg, вы можете сделать рекурсивный запрос, где классы могут быть N-уровнями. Это будет также быстрее. –