0

students在学生表中有一个列表,在表中有一个他们的课程列表,这些课程中的students_courses每一个都可能是活动的或非活动的。
我想知道是否有一种快速找到“活跃”用户的方法,这意味着他们至少有 1 门活跃课程(sc. active= 1)以及非活跃用户。非活跃用户是那些没有课程的人(没有一行)或者他们所有的课程都是active= 0

我还想在获取实际列表之前获取行数。
提前致谢

4

2 回答 2

1

这个查询可能有点慢,因为它使用子查询,但假设你有一个字段studentId,你可能会使用这个:

SELECT
   students.*,
   IF (
       studentId IN (
           SELECT
               studentId
           FROM
               students_courses
           WHERE
               active=1
   ),1,0) AS hasCourses
FROM
    students
于 2012-04-15T10:35:40.460 回答
1
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)
于 2012-04-15T10:36:37.947 回答