Возможно, вы ищете что-то вроде этого:
select e.studentid, e.classid, dt.classmates
from (
select classid, group_concat(studentid) as classmates
from enrolled
group by classid
) as dt
join enrolled e on e.classid = dt.classid
where e.studentid = 'a'
Основная идея состоит в том, чтобы сгенерировать списки одноклассников, сгруппировавшись по classid
, а затем соединить его с enrolled
, чтобы вы могливыберите интересующего вас студента.
Когда вы используете where e.studentid = 'a'
, вы получите следующее:
+-----------+---------+------------+
| studentid | classid | classmates |
+-----------+---------+------------+
| a | 1 | a,b,c |
| a | 2 | a,c |
| a | 3 | a,b |
+-----------+---------+------------+
фильтрация по e.studentid = 'b'
выходам:
+-----------+---------+------------+
| studentid | classid | classmates |
+-----------+---------+------------+
| b | 1 | a,b,c |
| b | 3 | a,b |
+-----------+---------+------------+
и фильтрация по e.studentid = 'c'
дает вам следующее:
+-----------+---------+------------+
| studentid | classid | classmates |
+-----------+---------+------------+
| c | 1 | a,b,c |
| c | 2 | a,c |
+-----------+---------+------------+