假设我有以下结构:
课程
ID | 姓名 |
---|---|
1 | 数学 |
2 | 历史 |
学生
ID | 姓名 | 课程编号 |
---|---|---|
1 | 鲍勃 | 1 |
2 | 爱丽丝 | 1 |
我想进行查询,列出一门课程中的所有学生,但如果特定学生参加了该课程,则过滤课程。
如果我使用以下查询,学生“Bob”不在以逗号分隔的学生列表中。
SELECT
c.name,
GROUP_CONCAT(s.name separator ',')
FROM
Courses as c
LEFT JOIN Students s ON s.courseID = c.ID
WEHRE
s.name = 'Alice'
GROUP BY
c.name
我知道我可以连接两次,一次用于过滤,另一次用于GROUP_CONCAT
,但感觉效率很低,因为我连接了两次。有没有更高效、更直接的方法来做到这一点?