使用MySQL查询查找活动和非活动的学生

时间:2012-04-15 10:20:04

标签: mysql join

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

的用户

我也希望在获得实际列表之前获取行数 提前致谢

2 个答案:

答案 0 :(得分:1)

此查询可能有点慢,因为它使用子查询,但假设您有一个字段studentId,您可以使用它:

SELECT
   students.*,
   IF (
       studentId IN (
           SELECT
               studentId
           FROM
               students_courses
           WHERE
               active=1
   ),1,0) AS hasCourses
FROM
    students

答案 1 :(得分: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)