我students
在学生表中有一个列表,在表中有一个他们的课程列表,这些课程中的students_courses
每一个都可能是活动的或非活动的。
我想知道是否有一种快速找到“活跃”用户的方法,这意味着他们至少有 1 门活跃课程(sc. active
= 1)以及非活跃用户。非活跃用户是那些没有课程的人(没有一行)或者他们所有的课程都是active
= 0
我还想在获取实际列表之前获取行数。
提前致谢
这个查询可能有点慢,因为它使用子查询,但假设你有一个字段studentId
,你可能会使用这个:
SELECT
students.*,
IF (
studentId IN (
SELECT
studentId
FROM
students_courses
WHERE
active=1
),1,0) AS hasCourses
FROM
students
SELECT sum(students_courses.active) as sum, student_id FROM
students JOIN students_courses
ON students.student_id = students_courses.student_id
GROUP BY students_courses.student_id
如果 sum = 0 这意味着没有课程,大于 0 意味着有些课程
对于非活动用户,获取所有不在 student_course 中的 student_id
SELECT student_id FROM students WHERE student_id NOT IN
(SELECT DISTINCTROW student_id FROM students)